R - 用变量对重新组织一个熔化的 data.frame

标签 r dataframe reshape2

对不起,我在帖子标题中不是特别清楚......我希望我的例子会更清楚!

如果我从一个数据框开始:

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/

相关文章:

r - 可视化以日期范围表示的时间范围数据

r - 查找包含两个以上连续 TRUE 逻辑值的行

R - 从数据框中排除不包含某些值的行

r - lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) 错误 : 0 (non-NA) cases in r with repeated mesures ANOVA

python - 有没有一种方法可以以有吸引力的方式自动呈现 pandas Dataframes

python - 如何将一个数据框列拆分为多列

python - 使用Python SDK导出数据

R Pivot 更长且具有多个列

R: reshape 2 - colsplit 不适用于句号/句号

r - 为什么 dcast 不接受 x[length(x)]?