r - 如何重塑数据框并将新变量添加到数据框中
问题描述
我有一个如下所示的数据框。
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 来做到这一点,但想知道是否有更好的更聪明的方法并需要帮助。
解决方案
使用dplyr
andtidyr
我们可以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
推荐阅读
- aws-lambda - 模拟 Lambda.invoke 包装但未被调用
- java - 令牌“sList”上的语法错误,此令牌后应为 VariableDeclaratorId ....?如何解决这个问题..?
- ios - SFSafariViewController 智能横幅
- java - app:passwordToggleEnabled="true" 不起作用
- javascript - 单击后取消对 Boostrap 5 切换按钮的关注
- python - 'float' 对象在 for 循环中不可迭代
- java - Spring Boot 中的处理程序方法正在保存新记录,而不是更新数据库中已存在的记录以进行 put 请求
- python - 如何在不自动重新启动的情况下停止 Google Colab 运行时
- android - 与 CCID HID 阅读器通信时如何构造正确的 PC_to_RDR_IccPowerOn
- javascript - React-native-gifted-chat 图像未显示