我有一个如下所示的数据框。
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来做到这一点,但想知道是否有更好的方法,需要帮助。
答案 0 :(得分:1)
使用dplyr
和tidyr
可以将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