我的数据框中有2列,请参阅下面
no value
1 A_0.9
1 B_0.8
1 C_0.7
1 D_0.7
2 B_0.9
2 D_0.8
2 A_0.7
2 C_0.7
我想创建如下新的数据框
no value1 value2 value3 value4
1 A_0.9 B_0.8 C_0.7 D_0.7
2 B_0.9 D_0.8 A_0.7 C_0.7
即:对于“no”列中的每个唯一值,将使用“value”列中的数据创建多个列
最佳答案
使用data.table
,我们可以通过no
和rleid()
为每个唯一的值
创建一个序列,然后使用它来 dcast()
将数据转换为宽格式。
library(data.table)
dcast(setDT(df)[, nr := rleid(value),by = no], no ~ nr)
# no 1 2 3 4
#1 1 A_0.9 B_0.8 C_0.7 D_0.7
#2 2 B_0.9 D_0.8 A_0.7 C_0.7
或者使用dev version (1.9.7) data.table
的,以下是可能的,谢谢@Arun!
dcast(setDT(df), no ~ rowid(no, prefix = 'value'))
# no value1 value2 value3 value4
#1: 1 A_0.9 B_0.8 C_0.7 D_0.7
#2: 2 B_0.9 D_0.8 A_0.7 C_0.7
关于r - 基于其他列在 R 中创建多个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36623580/