在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()可以更有效地做到这一点,但我在语法中迷失了.提前致谢!
你可以melt从reshape2包中使用
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)
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)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |