R语言如何合并Standing等4列生成Posture数值型新列
解决方案
首先从你给出的示例数据和预期Posture取值,可确认四列状态为互斥关系,每行仅对应一种姿态,编码映射规则如下:
- 1 = New_Sitting(坐姿)
- 2 = Cycling(骑行)
- 3 = Stepping(踏步)
- 4 = Standing(站立)
方法1:稳妥写法(推荐初学者使用)
使用dplyr包的case_when函数逐行判断姿态,逻辑直观,可自动识别异常行,生成的新列默认就是双精度(dbl)类型:
# 已加载tidyverse的话可跳过这步 library(dplyr) graph_pre <- graph_pre %>% mutate( Posture = case_when( New_Sitting != 0 ~ 1, Cycling != 0 ~ 2, Stepping != 0 ~ 3, Standing != 0 ~ 4, TRUE ~ NA_real_ # 四列全为0的异常行赋值为双精度类型缺失值 ) )
方法2:简便写法
观察你的原始数据可发现:四列中每一行有且仅有一列非0,且非0数值刚好和Posture的预期取值完全匹配,因此直接对四列按行求和即可得到结果,代码更简洁:
library(dplyr) graph_pre <- graph_pre %>% mutate(Posture = Standing + Stepping + Cycling + New_Sitting)
结果验证
用你提供的dput测试数据运行上述代码后,前10行的Posture列输出和预期完全一致:
Posture <dbl> 1 2 2 3 3 2 4 1 5 1 6 1 7 3 8 4 9 4 10 4
注:如果需要调整Posture列的位置,可以在
mutate中添加.after = 列名参数,比如.after = VM就会把新列放在VM列后方。
内容的提问来源于stack exchange,提问作者Richard Michaud Langis
相关产品推荐
相关产品推荐

