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
。显然,列的选择取决于列名,更重要的部分是跨列的过滤器。