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 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)
我认为该功能试图做我为它做的事情。但是,在我将 novalue 作为数据框之前,我得到了数据的矩阵。当我把它变成一个数据框时,我得到一个由矩阵组成的数据框(或者它看起来)。我不确定我在哪里写错了论点。
作为参考,我试图得到的数据输出是这样的:
ID Var1P Var1C Var2P Var2C Var3P Var3C NoDxP NoDxC
102 1 1 1 2 1 1 1 1
104 1 0 2 0 1 1 1 1
感谢大家的帮助和时间!
解决方案
根据更新的问题进行编辑。
使用dplyr
:
library(dplyr)
df1 %>%
filter(across(-starts_with("ID"), ~ . < 3))
结果:
ID Var1P Var1C Var2P Var2C Var3P Var3C
1 102 1 1 1 2 1 1
2 104 1 0 2 0 1 1
数据在哪里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))
推荐阅读
- c# - json函数返回值但值未显示在mvc的文本框中
- swift - 通过字符串和/或枚举引用类的成员
- mongodb - 如何使用 mongodb 查询查找 50 到 100 之间的标记?
- reactjs - react-router v4 - 如何仅更改 URL 路径的一部分而其余部分保持不变?
- sass - SCSS:如何将两个类与 & 号一起使用?
- assembly - 为什么某些链接器制作的汇编代码位于 GOT 而不是 PLT?
- sql - 如何在空记录之间填充缺失的日期?
- android - 将变量传递给方法以对其进行初始化失败
- yocto - 在 bitbake 文件中使用外部变量的 if else 语句
- c++ - 对于 BTreeMap 和其他依赖 Ord 的东西,是否有等效于 C++ 比较器对象?