首页 > 解决方案 > 如何在 R 中重新排列数据表的格式?

问题描述

我需要把表格整理成下面的格式,让别人看清楚哪个名字是重复的,对应的值

#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 对“名称”和“值”)

谢谢

标签: rdataframedplyrdata.tabletidyverse

解决方案


这是一个data.table解决方案。您可以使用在每个rleid索引中创建一个索引 ( id) ,然后使用该索引name旋转数据nameid

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

推荐阅读