1
我試圖創建一個新的變量,由其他列基於第三列中的值填充。例如,考慮下面的數據:根據另一列有條件地選擇多個其他列的值創建新列
x our1 our2 our3 our4 our5
4 10 50 40 30 20
1 20 10 50 40 30
3 30 20 10 50 40
2 40 30 20 10 50
5 50 40 30 20 10
我想創建一個新列「Y」將從要麼OUR1,外環OUR2,our3,our4,或our5基於價值填充「X」。如果x的值是1,y將取our1的值;如果「x」的值是2,y將取our2的值;等等。對於上面的例子,它將填充了這種方式:
x our1 our2 our3 our4 our5 y
4 10 50 40 30 20 30
1 20 10 50 40 30 20
3 30 20 10 50 40 10
2 40 30 20 10 50 30
5 50 40 30 20 10 10
這裏是我使用的代碼:
df$y <- NA
df$y[df$x==1]<-df$our1[df$x==1]
df$y[df$x==2]<-df$our2[df$x==2]
df$y[df$x==3]<-df$our3[df$x==3]
df$y[df$x==4]<-df$our4[df$x==4]
df$y[df$x==5]<-df$our5[df$x==5]
但是,當我使用此代碼,它在錯誤的列填充值新專欄y。實際上,我有22列,我的代碼應該從中拉出來。但是隻有來自our1的值纔會轉到正確行中的列y。 our2的值轉到x = 12的行,our3的值轉到x = 16的行,our4的值轉到x = 17的行等。
有沒有什麼我是做錯了代碼?關於問題是什麼以及我如何解決它的任何想法?
謝謝!
感謝@akrun。我嘗試了這個策略,但似乎沒有奏效。我有一個1880行和許多列的數據集。我將數據集分爲只有x列和22個「我們」列(即our1,our2,our3等)。然後我嘗試填充y列: df $ y < - df [-1] [cbind(1:nrow(df),df $ x)] 像您所建議的那樣。但是,當我嘗試查看前5行時,它給了我這個錯誤: 錯誤(函數(類,fdef,mtable): 無法找到函數'as.item'的簽名'「列表的繼承方法」 '。任何關於什麼可能出錯的想法? – tlev
@tlev我想你可能已經對錯誤的列進行了子集化,我認爲你需要而不是'df [-1]'即'df [grep(「our」,names(df ))'' – akrun
thanks @akrun。我剛剛使用了這個命令:df $ y < - df [grep(「our」,names(df))] [cbind(1:nrow(df),df $ x)]但當我嘗試查看新列的前5行時,我仍然收到同樣的錯誤,我從來沒有用過這種方式使用過cbind,我不明白這個代碼是如何知道從哪個列中提取的。在第x列中的數字處,然後找到具有該數字的列名稱以選擇從哪個列中抽取? – tlev