2016-09-27 34 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])) 
}