2016-09-27 8 views
0

データフレームのバフには、商品ごとに2つのカラムitemnumberとbufferlevelsが含まれています。Rのフィールド名を検索できませんR

buffer.variant buffer.buf_size 
1  mimic1    3 

2  mimic2    0 

3  mimic3    0 

4  mimic4    0 

5  mimic5    3 

フルフィルメントは、第1列が日付で、バリアントが他の列であるdata.frameです。 1. buffの最初の行の列名を検索します 2.最初の行とi番目の列セルにbuffの2番目の列にある値、つまりバッファレベルを割り当てます

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

'のための(I 1:(NcoI部位(履行)-1))'あなたは省略でき – HubertL

+0

'which' – HubertL

+0

機能を使用 –

答えて

0

だから私はこの問題を解決することができました。問題はRがNullを返すことでした。私は、条件付きでnull値のチェックを追加しました。 @HubertLが指摘したもう一つの笑いがありましたが、私はイテレータの値を印刷し始めたときしか認識しませんでした。プログラムフローがコードの '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])) 
} 
関連する問題