有没有一种方法可以在R中的多个列中多次识别与某个条件匹配的行?
我有一个病人填写的问卷数据集。 我想用诊断标准来识别它们;我正在努力解决的标准要求至少有3个>=3的答案(问题类似于从1到5的ERT问题) 我正在处理的数据集的MWE如下所示有没有一种方法可以在R中的多个列中多次识别与某个条件匹配的行?,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我有一个病人填写的问卷数据集。 我想用诊断标准来识别它们;我正在努力解决的标准要求至少有3个>=3的答案(问题类似于从1到5的ERT问题) 我正在处理的数据集的MWE如下所示 data <- structure(list(q1 = c(1, 2, 3, 1, 1, 1, 1, 3, 1, 1), q2 = c(1, 1, 3, 1, 1, 1, 1, 3, 1, 1), q3 = c(1, 1, 1, 1, 3, 3, 1, 1, 1, 1), q4 = c(1, 2, 2, 1,
data <- structure(list(q1 = c(1, 2, 3, 1, 1, 1, 1, 3, 1, 1), q2 = c(1,
1, 3, 1, 1, 1, 1, 3, 1, 1), q3 = c(1, 1, 1, 1, 3, 3, 1, 1,
1, 1), q4 = c(1, 2, 2, 1, 1, 3, 1, 3, 1, 1), q5 = c(1, 1,
3, 1, 1, 1, 1, 1, 1, 1)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
data也许,我们可以使用rowSums
data$diagnostic <- +(rowSums(data >=3) == 3)
data$diagnostic
#[1] 0 0 1 0 0 0 0 1 0 0
数据$diagnostic=3)==3)
数据$诊断
#[1] 0 0 1 0 0 0 0 1 0 0
使用dplyr
,您可以使用行
和c\u跨
:
library(dplyr)
result <- data %>%
rowwise() %>%
mutate(diagnostic = as.integer(sum(c_across(starts_with('q')) >= 3) >= 3))
result
# q1 q2 q3 q4 q5 diagnostic
# <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1 1 1 1 1 1 0
# 2 2 1 1 2 1 0
# 3 3 3 1 2 3 1
# 4 1 1 1 1 1 0
# 5 1 1 3 1 1 0
# 6 1 1 3 3 1 0
# 7 1 1 1 1 1 0
# 8 3 3 1 3 1 1
# 9 1 1 1 1 1 0
#10 1 1 1 1 1 0
库(dplyr)
结果%
行()
突变(诊断=as.integer(总和(c_跨(以('q'))开头)>=3)>=3))
结果
#第一季度第二季度第三季度第四季度第五季度诊断
#
# 1 1 1 1 1 1 0
# 2 2 1 1 2 1 0
# 3 3 3 1 2 3 1
# 4 1 1 1 1 1 0
# 5 1 1 3 1 1 0
# 6 1 1 3 3 1 0
# 7 1 1 1 1 1 0
# 8 3 3 1 3 1 1
# 9 1 1 1 1 1 0
#10 1 1 1 1 1 0
为了完整起见,添加%%>%过滤器(诊断==1)
最终只会为您提供患者3和8的备份。我刚刚再试了一次,效果很好。。。我不明白为什么。我已经删除了我的回复
library(dplyr)
result <- data %>%
rowwise() %>%
mutate(diagnostic = as.integer(sum(c_across(starts_with('q')) >= 3) >= 3))
result
# q1 q2 q3 q4 q5 diagnostic
# <dbl> <dbl> <dbl> <dbl> <dbl> <int>
# 1 1 1 1 1 1 0
# 2 2 1 1 2 1 0
# 3 3 3 1 2 3 1
# 4 1 1 1 1 1 0
# 5 1 1 3 1 1 0
# 6 1 1 3 3 1 0
# 7 1 1 1 1 1 0
# 8 3 3 1 3 1 1
# 9 1 1 1 1 1 0
#10 1 1 1 1 1 0