如何在R的tibble中将指定因子问卷列转数值后按行求和生成pain列
在R中对tibble的因子问卷列按行求和生成新列
问题背景
我有一个名为ehp30的R tibble,共13列,其中11列是患者随访问卷的因子类型回答。第一行模拟数据如下:
Pat_TNO AssNo eSocialEvents eJobsAtHome eStandingUp eSittingDown eWalking eExercise eAppetite eSleep eHadToLieDown eUnableToDo eUnableToCope <dbl> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> <fct> 1 1234 baseline Often Often Sometimes Sometimes Sometimes Often Sometimes Often Often Often Sometimes
这些问卷列的因子水平为"Never"、"Rarely"、"Sometimes"、"Often"、"Always",分别对应数值1-5。需要新增一列pain,其值为eSocialEvents到eUnableToCope这11列的数值按行求和结果,第一行求和结果应为39。
解决方案
使用dplyr包的mutate和across函数即可实现,步骤如下:
- 加载
dplyr包(未安装先运行install.packages("dplyr")):
library(dplyr)
- 转换因子为数值并按行求和:
ehp30 <- ehp30 %>% mutate(pain = rowSums(across(eSocialEvents:eUnableToCope, ~ as.integer(.x))))
说明
across(eSocialEvents:eUnableToCope, ~ as.integer(.x)):将指定范围内的每一列因子转换为对应整数(因子水平顺序与数值1-5完全匹配,as.integer()直接返回对应的分值)rowSums():对转换后的数值列按行求和,结果存入新列pain
验证第一行结果
第一行11个因子对应的数值分别为:4、4、3、3、3、4、3、4、4、4、3,求和结果为4+4+3+3+3+4+3+4+4+4+3=39,符合预期。
可选:确保因子水平正确
如果不确定因子水平顺序是否正确,可先重新指定水平避免转换错误:
ehp30 <- ehp30 %>% mutate(across(eSocialEvents:eUnableToCope, ~ factor(.x, levels = c("Never", "Rarely", "Sometimes", "Often", "Always")))) %>% mutate(pain = rowSums(across(eSocialEvents:eUnableToCope, ~ as.integer(.x))))
内容的提问来源于stack exchange,提问作者jackahall
相关产品推荐
相关产品推荐

