首页 > 解决方案 > 如何重塑数据框并将新变量添加到数据框中

问题描述

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

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 新手,不确定“reshape”是否是正确的词,但我想通过创建一个新变量“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 来做到这一点,但想知道是否有更好的更聪明的方法并需要帮助。

标签: rdataframe

解决方案


使用dplyrandtidyr我们可以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

推荐阅读