如何重塑形状并将新变量添加到数据框

时间:2019-06-15 03:59:14

标签: r dataframe

我有一个如下所示的数据框。

prefecture height_M weight_M height_F weight_F
1          110.7    19.1     109.8    18.7 
2          111.0    19.1     110.1    18.7
3          111.5    19.7     110.2    19.4

我是R的新手,不确定“重塑”是否是正确的词,但是我想通过制作一个新变量“ sex”来重塑数据框,该变量将为M或F。

我还想将height_M,weight_M,height_F,weight_F的变量名称更改为“ height”和“ weight”。

预期结果将是这样。

prefecture height   weight   sex
1          110.7    19.1     M
2          111.0    19.1     M
3          111.5    19.7     M
1          109.8    18.7     F
2          110.1    18.7     F
3          110.2    19.4     F

我尝试通过mutate和rbind来做到这一点,但想知道是否有更好的方法,需要帮助。

1 个答案:

答案 0 :(得分:1)

使用dplyrtidyr可以将gather转换为长格式,将separate key转换为不同的列,然后将spread转换为宽格式。

library(dplyr)
library(tidyr)

df %>%
  gather(key, value, -prefecture) %>%
  separate(key, c("key", "sex"), sep = "_") %>%
  spread(key, value)

#  prefecture sex height weight
#1          1   F  109.8   18.7
#2          1   M  110.7   19.1
#3          2   F  110.1   18.7
#4          2   M  111.0   19.1
#5          3   F  110.2   19.4
#6          3   M  111.5   19.7