r - R根据行中的值在列中重复
问题描述
我有一个如下的数据框:
Name School Weight Days
Antoine Bach 0.03 5
Antoine Ken 0.02 7
Barbara Franklin 0.04 3
我想获得如下输出:
Name School 1 2 3 4 5 6 7
Antoine Bach 0.03 0.03 0.03 0.03 0.03 NA NA
Antoine Ken 0.02 0.02 0.02 0.02 0.02 0.02 0.02
Barbara Franklin 0.04 0.04 0.04 NA NA NA NA
可重现的样本数据:
df <- tribble(
~Name, ~School, ~Weight, ~Days,
"Antoine", "Bach", 0.03, 5,
"Antoine", "Ken", 0.02, 7,
"Barbara", "Franklin", 0.04, 3
)
解决方案
使用 data.table 您可以通过将每行的值次数rep
吃掉来创建一个长版本,然后使用新变量的作为列的宽格式。Weight
Days
dcast
rowid
library(data.table)
setDT(df)
dcast(df[, .(rep(Weight, Days)), .(Name, School)],
Name + School ~ rowid(V1))
# Name School 1 2 3 4 5 6 7
# 1: Antoine Bach 0.03 0.03 0.03 0.03 0.03 NA NA
# 2: Antoine Ken 0.02 0.02 0.02 0.02 0.02 0.02 0.02
# 3: Barbara Franklin 0.04 0.04 0.04 NA NA NA NA
你也可以rep
Weight
数Days
,然后代表NA
足够的次数来完成该行。
max_days <- max(df$Days)
df[, as.list(rep(c(Weight, NA), c(Days, max_days - Days))),
.(Name, School)]
# Name School V1 V2 V3 V4 V5 V6 V7
# 1: Antoine Bach 0.03 0.03 0.03 0.03 0.03 NA NA
# 2: Antoine Ken 0.02 0.02 0.02 0.02 0.02 0.02 0.02
# 3: Barbara Franklin 0.04 0.04 0.04 NA NA NA NA
推荐阅读
- python - Discord.py bot 不会加入 vc
- replication - 如何计算复制因子 3 与 5 与 9 之间的可用性差异
- amazon-web-services - 无法将 kubectl apply -f 应用于我的 EKS 集群:访问被拒绝(root 帐户可能不承担角色)
- mysql - 对大量记录有更好的查询性能
- python - 登录未重定向到 django 上的指定 url
- python - 提高嵌套 for 循环计数到字典中的效率 - Python
- c# - WinUI ItemsRepeater如何添加交错的项目入口动画?
- html - 选择 DIV 与另一个 DIV 之外的 DIV 父级使用严格的 CSS
- python - 安装 VS Code 包以在多个 Conda 环境中工作
- wordpress - 显示锚内容的 Wordpress 插件