r - 如何在 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 对“名称”和“值”)
谢谢
解决方案
这是一个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
推荐阅读
- javascript - 无法在 axios react.js 中捕获错误
- javascript - 使用 textInput 从用户获取价值并分配给变量(React-Native)
- html - Django Bootstrap - 如何更改下拉菜单项的宽度
- javascript - 将 Json 值从字符串转换为整数
- rest - 我应该如何保护这个公共 API?
- javascript - 我可以在 github 上获取渲染地图的源代码吗?
- python - Pytorch 的 nn.TransformerEncoder “src_key_padding_mask”未按预期运行
- javascript - 在 Google Slides API 中使用 createImage 时的最大图像大小是多少?
- azure - 带有指向附加 VNet、路由表和 NSG 的链接的 Azure 子网的输出
- java - 如何通过其类型获得具有反射的参数化集合?