抱歉,我在帖子标题中没有特别表述。我希望我的例子会更清楚!
如果我从一个数据帧开始:
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