我需要将表格排列为以下格式,以使其他人清楚看到哪个名称重复和对应的值
#original df
df <- data.frame(name=c('a','a','a','b','b'),
value=(c(1,2,3,4,5)),stringsAsFactors = FALSE)
#df
name value
a 1
a 2
a 3
b 4
b 5
#target df
name1 value1 name2 value2 name3 value3
a 1 a 2 a 3
b 4 b 5 NA NA
希望该解决方案可以自动扩展列。如果“ a”重复4次,则目标df应为8列(4对“名称”和“值”)
谢谢
答案 0 :(得分:3)
这是一个data.table
解决方案。您可以使用rleid
在每个id
中创建一个索引(name
),然后使用name
对着该id
的数据进行旋转
library(data.table)
setDT(df)
df[, id := rleid(value), by=name]
dcast(df, name ~ id, value.var="value")
输出:
name 1 2 3
1: a 1 2 3
2: b 4 5 NA