0
我的數據是這樣的:的R - 有條件地從一列中的值複製到新列
Item | S1 | S2 | S3 | S4 | ID | New
A | 1 | 2 | 5 | 8 | 1 |
A | 4 | 4 | 5 | 4 | 1 |
A | 6 | 7 | 1 | 3 | 1 |
A | 4 | 1 | 7 | 6 | 1 |
B | 3 | 1 | 5 | 3 | 2 |
B | 1 | 4 | 5 | 2 | 2 |
B | 8 | 7 | 3 | 6 | 2 |
B | 4 | 1 | 5 | 2 | 2 |
C | 4 | 2 | 6 | 4 | 4 |
C | 6 | 6 | 7 | 1 | 4 |
C | 2 | 3 | 3 | 7 | 4 |
C | 5 | 8 | 9 | 2 | 4 |
D | 2 | 1 | 2 | 3 | 3 |
D | 2 | 6 | 7 | 6 | 3 |
D | 2 | 3 | 0 | 4 | 3 |
D | 2 | 1 | 2 | 1 | 3 |
E | 6 | 1 | 3 | 5 | 4 |
E | 3 | 2 | 4 | 4 | 4 |
E | 6 | 6 | 7 | 7 | 4 |
E | 3 | 8 | 1 | 4 | 4 |
根據爲每一個「項目」的「ID」列下的價值,我想填充柱「新「,其值爲S1,S2,S3或S4。例如,由於A的ID是1,我只希望S1下的值位於新列中。
輸出要求:
Item | S1 | S2 | S3 | S4 | ID | New
A | 1 | 2 | 5 | 8 | 1 | 1
A | 4 | 4 | 5 | 4 | 1 | 4
A | 6 | 7 | 1 | 3 | 1 | 6
A | 4 | 1 | 7 | 6 | 1 | 4
B | 3 | 1 | 5 | 3 | 2 | 1
B | 1 | 4 | 5 | 2 | 2 | 4
B | 8 | 7 | 3 | 6 | 2 | 7
B | 4 | 1 | 5 | 2 | 2 | 1
C | 4 | 2 | 6 | 4 | 4 | 4
C | 6 | 6 | 7 | 1 | 4 | 1
C | 2 | 3 | 3 | 7 | 4 | 7
C | 5 | 8 | 9 | 2 | 4 | 2
D | 2 | 1 | 2 | 3 | 3 | 2
D | 2 | 6 | 7 | 6 | 3 | 7
D | 2 | 3 | 0 | 4 | 3 | 0
D | 2 | 1 | 2 | 1 | 3 | 2
E | 6 | 1 | 3 | 5 | 4 | 5
E | 3 | 2 | 4 | 4 | 4 | 4
E | 6 | 6 | 7 | 7 | 4 | 7
E | 3 | 8 | 1 | 4 | 4 | 4
現在,我使用for循環來比較每個項目的ID,然後在循環中使用paste0("S", counter_variable)
列。我的數據在「Item」和超過1,200萬行下有大約40,000個不同的值,而且這是永久的。有沒有更快的方法來做到這一點?
對於你的情況下,這將是'DF [2:5] [cbind(seq_along(DF $ ID),DF $ ID)]' –