【发布时间】:2018-09-02 17:10:15
【问题描述】:
我正在尝试解开一个带有变量的大表。 这个帖子只给了我提示,但没有解决我的问题 (How to "unmelt" data with reshape r)。
我想从这里出发:
name1 name2 values group
xyz1 abc1 1 group1
xyz2 ghf 2 group2
xyz3 lmn 3 group1
xyz4 opq 4 group2
xyz1 abc1 5 group2
xyz2 ghf 6 group1
xyz3 lmn 7 group2
xyz4 opq 8 group1
xyz5 stu 2 group3
到
name1 name2 group_1 gruoup_2 group_3
xyz1 abc1 1 6 NA
xyz2 ghf33 6 2 NA
xyz3 lmn93 3 5 NA
xyz4 opq42 8 4 NA
xyz5 stu21 NA NA 2
我当前的“unmelt”命令是
d <- read.table("test.txt", header=T, sep="\t")
e <- dcast(d, name1 + name2 ~ group ~ values)
但这不会将值分配给组和 name1 和 name2 如果你能帮助我,那就太好了。 太感谢了! D
【问题讨论】:
-
使用
data.table:dcast(dat, name1 + name2 ~ group, value.var="values")。 -
dcast(dat, name1+name2~group, value.var="values") 对我有用(使用 data.table 的 dcast)
-
要在基础 R 中执行此操作,您可以像这样使用
reshapereshape(dat, direction="wide", idvar=c("name1", "name2"), timevar="group")。 -
这是一个非常接近的电话,但你对我的投票表示赞成,因为我提醒用户注意这个多功能但棘手的(阅读令人抓狂)功能。
-
@MauritsEvers (soapbox) 作为个人喜好,我尽量避免使用“诗句”。请注意,您提到了
dplyr::spread,而答案提到了tydyr::spread。我通常在包受限的环境中工作,有时在添加包时遇到困难。此外,我还记得gglot2的一个不断变化的界面,而我的一些编程选择很糟糕,需要 5 多个小时来调整脚本以适应新版本。另一位前任请参阅data.frame to list 中的讨论。