r - 基于其他列在 R 中创建多个列

标签 r data-manipulation

我的数据框中有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,我们可以通过norleid()为每个唯一的创建一个序列,然后使用它来 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/

相关文章:

R : How to detect and fix abnormal values on plot?

r - 查找字符串中重叠的长度

r - 如何根据特定序列中出现的值对列进行变异?

r - 如何使用 dplyr 估算 R 中的缺失变量?

r - 如何为 S3 对象创建赋值方法?

r - 如何使用循环为 R 中的多个网页抓取网站数据?

RStudio:从查看器保存数据

python - 在 python pandas 中创建交叉表,显示存在哪些值

r - 根据分组从列中减去值

java - 如何从 Java 数组中删除对象?