R 如何筛选多个可能的值?

R 如何筛选多个可能的值?,r,R,我有一张像这样的桌子: ID Var1P Var1C Var2P Var2C Var3P Var3P NoDxP NoDxC 101 1 3 3 1 1 1 1 1 102 1 1 1 2 1 1 1 1 103 2 1 1

我有一张像这样的桌子:

ID   Var1P     Var1C     Var2P    Var2C   Var3P   Var3P   NoDxP NoDxC
101  1         3         3        1        1      1       1      1
102  1         1         1        2        1      1       1      1
103  2         1         1        3        1      1       1      1
104  1         0         2        0        1      1       1      1
我一直试图做的是只过滤所有值为0、1或2的观察值。基本上摆脱任何得分为3或更高的东西。我正在尝试使用此筛选器方法-应该注意,此数据帧是类字符:

namesnovalue <- dataframe[c(2:7)]
namesnovalue <- names(namesnovalue)
filternovalue <- function(x) {
  filter(dataframe, x == '1' | x == '0' | x == '2')
}

novalue <- sapply(dataframe[namesnovalue], FUN=filternovalue, simplify=TRUE, USE.NAMES=TRUE)
novalue <- as.data.frame(novalue)

谢谢大家的帮助和时间

根据更新的问题进行编辑

使用
dplyr

library(dplyr)
df1 %>% 
  filter(across(-starts_with("ID"), ~ . < 3))
其中数据
df1
为:

df1 <- structure(list(ID = 101:104, Var1P = c(1L, 1L, 2L, 1L), 
                      Var1C = c(3L, 1L, 1L, 0L), Var2P = c(3L, 1L, 1L, 2L), 
                      Var2C = c(1L, 2L, 3L, 0L), Var3P = c(1L, 1L, 1L, 1L), 
                      Var3C = c(1L, 1L, 1L, 1L)), 
                      class = "data.frame", 
                      row.names = c(NA, -4L))

df1根据更新的问题进行编辑

使用
dplyr

library(dplyr)
df1 %>% 
  filter(across(-starts_with("ID"), ~ . < 3))
其中数据
df1
为:

df1 <- structure(list(ID = 101:104, Var1P = c(1L, 1L, 2L, 1L), 
                      Var1C = c(3L, 1L, 1L, 0L), Var2P = c(3L, 1L, 1L, 2L), 
                      Var2C = c(1L, 2L, 3L, 0L), Var3P = c(1L, 1L, 1L, 1L), 
                      Var3C = c(1L, 1L, 1L, 1L)), 
                      class = "data.frame", 
                      row.names = c(NA, -4L))

df1在base R中,您可以使用
rowSums
选择值不大于或等于3的行

df[rowSums(df[-1] >= 3) == 0, ]

#   ID Var1P Var1C Var2P Var2C Var3P Var3P.1 NoDxP NoDxC
#2 102     1     1     1     2     1       1     1     1
#4 104     1     0     2     0     1       1     1     1

在基数R中,可以使用
行和
选择值不大于或等于3的行

df[rowSums(df[-1] >= 3) == 0, ]

#   ID Var1P Var1C Var2P Var2C Var3P Var3P.1 NoDxP NoDxC
#2 102     1     1     1     2     1       1     1     1
#4 104     1     0     2     0     1       1     1     1

这会起作用,但我认为我需要以不同的方式指定
start\u with()
。我的完整数据框架用于66个变量,它们后来在数据中开始有不同的名称。我将相应地更新问题。相应地编辑,假设您只想忽略第一列
ID
。显然,列的选择取决于列名,更重要的部分是跨列的过滤器。这会起作用,但我认为我需要以不同的方式指定
start\u with()
。我的完整数据框架用于66个变量,它们后来在数据中开始有不同的名称。我将相应地更新问题。相应地编辑,假设您只想忽略第一列
ID
。显然,列的选择取决于列名,更重要的部分是跨列的过滤器。