You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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函数即可实现,步骤如下:

  1. 加载dplyr包(未安装先运行install.packages("dplyr")):
library(dplyr)
  1. 转换因子为数值并按行求和:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 02:35:19