R 如何重塑数据帧并向其添加新变量

R 如何重塑数据帧并向其添加新变量,r,dataframe,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 我还想将h

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

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来做这件事,但想知道是否有更好的更聪明的方法,需要帮助。

使用
dplyr
tidyr
我们可以
收集
到长格式中,
键分离到不同的列中,然后
扩展到宽格式中

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

解决方案将是-
重塑(dat,idvar=“eperty”,variable=-1,sep=“”,timevar=“sex”,direction=“long”)