重组数据框

时间:2019-07-10 03:22:16

标签: r dataframe reshape transpose

我的数据如下:

cat1 <- c("A","A","B","B")
gender <- c("male","female","male","female")
mean <- c(1,2,3,4)
sd <-c(5,6,7,8)
data <- data.frame("cat1"=cat1,"gender"=gender, "mean"=mean, "sd"=sd)


> data
  cat1 gender mean sd
1    A   male    1  5
2    A female    2  6
3    B   male    3  7
4    B female    4  8

我想将表格的格式更改为以下格式。

> data
  cat1    score    male    female
1    A    mean      1      2
2    A    sd        5      6
3    B    mean      3      4
4    B    sd        7      8

基本上,我在score和cat2变量之间交替进行。

有什么建议吗?

3 个答案:

答案 0 :(得分:3)

使用gatherspread的一个选项

library(dplyr)
library(tidyr)

data %>%
  gather(score, value, -cat1, -gender) %>%
  spread(gender, value)

#  cat1 score female male
#1    A  mean      2    1
#2    A    sd      6    5
#3    B  mean      4    3
#4    B    sd      8    7

答案 1 :(得分:2)

我们还可以使用melt包中的dcastdata.table

library(data.table)

dcast(melt(data, id=c("cat1","gender"), variable.name = "score"), cat1 + score ~ gender)
#>   cat1 score female male
#> 1    A  mean      2    1
#> 2    A    sd      6    5
#> 3    B  mean      4    3
#> 4    B    sd      8    7

通常,任何将数据转换为 long 格式,然后将其整形为 wide 以交换variablevalue列的解决方案都可以在这里。

答案 2 :(得分:1)

可以通过recast

完成
library(reshape2)
recast(data, id.var = 1:2, cat1 + variable ~ gender)
#   cat1 variable female male
#1    A     mean      2    1
#2    A       sd      6    5
#3    B     mean      4    3
#4    B       sd      8    7