如何将不良事件严重程度观测值转换为列并统计各患者的严重程度出现次数
解决方法:统计每位患者不同严重程度不良事件的出现次数
要实现你的需求,我们可以用两种常见的R方法来处理,一种是基于dplyr的tidyverse风格,另一种是base R方法,你可以根据自己的习惯选择:
方法1:使用tidyverse(dplyr)
先加载dplyr包,然后按行遍历统计各严重程度的出现次数:
library(dplyr) # 处理数据集 mydata_processed <- mydata %>% rowwise() %>% # 设定按行处理逻辑 mutate( # 统计每行中"modéré"的出现次数,自动忽略NA值 modéré = sum(c_across(starts_with("Dégré")) == "modéré", na.rm = TRUE), # 统计"sévère"的出现次数 sévère = sum(c_across(starts_with("Dégré")) == "sévère", na.rm = TRUE), # 统计"grave"的出现次数 grave = sum(c_across(starts_with("Dégré")) == "grave", na.rm = TRUE) ) %>% ungroup() # 取消行分组,恢复数据框的常规结构
方法2:使用Base R(无需额外包)
如果你不想加载第三方包,可以用原生R函数实现:
# 筛选所有以"Dégré"开头的列(即所有不良事件的严重程度列) degree_columns <- grep("^Dégré", names(mydata), value = TRUE) # 逐行统计各严重程度的出现次数 mydata$modéré <- rowSums(sapply(mydata[degree_columns], function(col) col == "modéré"), na.rm = TRUE) mydata$sévère <- rowSums(sapply(mydata[degree_columns], function(col) col == "sévère"), na.rm = TRUE) mydata$grave <- rowSums(sapply(mydata[degree_columns], function(col) col == "grave"), na.rm = TRUE)
结果验证
处理后的数据会新增modéré、sévère、grave三列,完全匹配你期望的输出:
- record_id=11的患者,
modéré计数为2(来自Dégré Autre 1和Dégré Autre 2),grave计数为1(来自Dégré Trble digest); - record_id=15的患者,
modéré计数为3(来自Dégré Trble digest、Dégré Autre 1、Dégré Autre 2)。
内容的提问来源于stack exchange,提问作者Seydou GORO
相关产品推荐
相关产品推荐

