对不起,我在帖子标题中不是特别清楚......我希望我的例子会更清楚!
如果我从一个数据框开始:
test.df <- data.frame(group=c(rep("a",4), rep("b",4)),
var=rep(1:4,2),
min= runif(8),
q25=runif(8,1,2),
q75=runif(8,2,3),
max=runif(8,3,4))
head(test.df,2)
group var min q25 q75 max
1 a 1 0.59078504 1.199138 2.119283 3.869486
2 a 2 0.06131107 1.676109 2.603068 3.739955
我知道可以用 id=c(group, var) 融化它
library(reshape2)
head(melt(test.df, id=c("group", "var")),2)
group var variable value
1 a 1 min 0.59078504
2 a 2 min 0.06131107
但我正在寻找的是一种通过将 min-max 和 q25-q75 配对来获得两个“值”列的方法,使其看起来像:
group var variable value1 value2
1 a 1 min-max 0.59078504 3.869486
1 a 1 q25-q75 1.199138 2.119283
2 a 2 min-max 0.06131107 3.739955
2 a 2 q25-q75 1.676109 2.603068
我在熔化/类型转换时有点卡住了,不能把自己拉出来,我确定必须有一种巧妙的方法来实现这一点?
编辑 :这是一个只有两对变量的简化示例 - 这个想法是用最少的“手动”工作来解决更多对的问题。
最佳答案
另一种尝试:
newnames <- c("value1","value2")
data.frame(
test.df[c("group","var")],
variable=rep(c("min-max","q25-q75"),each=nrow(test.df)),
rbind(
setNames(test.df[c("min","max")],newnames),
setNames(test.df[c("q25","q75")],newnames)
)
)
结果:
group var variable value1 value2
1 a 1 min-max 0.6939545 3.479807
2 a 2 min-max 0.5646825 3.564637
3 a 3 min-max 0.3509824 3.928308
4 a 4 min-max 0.4217888 3.376821
5 b 1 min-max 0.6493916 3.933157
6 b 2 min-max 0.3978330 3.129940
7 b 3 min-max 0.4407376 3.707715
8 b 4 min-max 0.1651875 3.798546
9 a 1 q25-q75 1.3531055 2.242076
10 a 2 q25-q75 1.1811900 2.240188
11 a 3 q25-q75 1.3043822 2.695175
12 a 4 q25-q75 1.3315480 2.542576
13 b 1 q25-q75 1.2397527 2.107442
14 b 2 q25-q75 1.1973467 2.545511
15 b 3 q25-q75 1.9193746 2.502551
16 b 4 q25-q75 1.0425474 2.225601
关于R - 用变量对重新组织一个熔化的 data.frame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18839211/