2016-09-27 58 views
0

的数据帧的buff包含用于不同的产品和itemnumber bufferlevels两列。无法查找字段名中的R

buffer.variant buffer.buf_size 
1  mimic1    3 

2  mimic2    0 

3  mimic3    0 

4  mimic4    0 

5  mimic5    3 

履行是一个数据框架,第一列作为日期和变体从buff作为其他列。我想要写一个循环,: 1.>查找该列名的buff 2的第一行中的>分配与存在于浅黄色的第二列中的值的第一行和第i列单元,即,缓冲水平

variants=names(fulfillment[,-1]) 
for(i in 1:ncol(fulfillment)){ 
    fulfillment[1,i+1]=buff[which(buff[,1]==variants[i]),2] } 

代码失败,出现错误:

Error in `[<-.data.frame`(`*tmp*`, 1, i + 1, value = integer(0)):   replacement has length zero 
+0

'的(我在1:点(NcoI(履行)-1))' – HubertL

+0

可以忽略'which' – HubertL

+0

使用的功能相匹配 –

回答

0

所以我能够解决的问题。问题在于R返回空值。我在条件中添加了一个空值检查。 @HubertL指出了另外一个小问题,但是当我开始打印迭代器i的值时,我才意识到这一点。它在程序流进入代码的'Then'部分之前被初始化为1并且被弃用为0。下面的代码:

variants=names(fulfillment[,-1]) 
for(i in 1:(ncol(fulfillment)-1)){ 
    if(!is.null(match(variants[i],buff[,1]))){ 
    print(paste0("step ",i)) 
    print(paste("old value ",fulfillment[1,i+1])) 
fulfillment[1,i+1]=buff[match(variants[i],buff[,1]),2]} 
print(paste0("New value ",fulfillment[1,i+1])) 
}