使用列名称将"多个列"折叠为两列,作为ID

can*_*ers 4 r dataframe

在R中,我试图将数据帧的多个列折叠为两列,第一个数据帧中的列名被复制到结果数据帧中的各自列中.例如,我有以下数据框df:

A     B     C     D
1     2     3     4
5     6     7     8
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取此输出,这在执行ANOVA测试时很有用:

 DV     IV
 A      1
 A      5
 B      2
 B      6
 C      3
 C      7
 D      4
 D      8
Run Code Online (Sandbox Code Playgroud)

我一直在通过声明新数据框来手动执行此操作:

 df2 <- data.frame("DV" = c(rep("A", 2), rep("B", 2), rep("C", 2), rep("D", 2)),
             "IV" = c(df$A, df$B, df$C, df$D))
Run Code Online (Sandbox Code Playgroud)

我怀疑aggregate()或melt()可以更有效地做到这一点,但我在语法中迷失了.提前致谢!

Exp*_*teR 5

你可以meltreshape2包中使用

library(reshape2)
melt(df, variable.name = "DV", value.name = "IV")

  DV IV
1  A  1
2  A  5
3  B  2
4  B  6
5  C  3
6  C  7
7  D  4
8  D  8
Run Code Online (Sandbox Code Playgroud)


rmu*_*uc8 5

A <- c(1,5)
B <- c(2,6)
C <- c(3,7)
D <- c(4,8)
df <- data.frame(A,B,C,D)
Run Code Online (Sandbox Code Playgroud)

我喜欢gather这个包tidyr,因为代码太短了

library(tidyr)
df2 <- gather(df, DV, IV)
Run Code Online (Sandbox Code Playgroud)