有没有一种方法可以在R中的多个列中多次识别与某个条件匹配的行?

有没有一种方法可以在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,

我有一个病人填写的问卷数据集。 我想用诊断标准来识别它们;我正在努力解决的标准要求至少有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, 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