r - 基于“否定”的数据帧子集
问题描述
我要做的基本上是创建没有特定诊断代码的患者数据框的子集。
例如,假设我不想要诊断 NIS 代码中的代码 1111、1112 和 1113(所有患者,但具有此代码的患者)
我在想我会做这样的事情,但它对我不起作用:(
假设 NIS 文件中只有 10 个诊断代码(尽管通常最多 30 个)
dataframe1<- subset(dataframe1, grepl(!1111,DX1) | grepl(!1111, DX2) | grepl(!1111, DX3) | grepl(!1111, DX4) | grepl(!1111, DX5) | grepl(!1111, DX6) | grepl(!1111, DX7) | grepl(!1111, DX8) | grepl(!1111, DX9) | grepl(!1111, DX10) | grepl(!1112,DX1) | grepl(!1112, DX2) | grepl(!1112, DX3) | grepl(!1112, DX4) | grepl(!1112, DX5) | grepl(!1112, DX6) | grepl(!1112, DX7) | grepl(!1112, DX8) | grepl(!1112, DX9) | grepl(!1112, DX10) | | grepl(!1113,DX1) | grepl(!1113, DX2) | grepl(!1113, DX3) | grepl(!1113, DX4) | grepl(!1113, DX5) | grepl(!1113, DX6) | grepl(!1113, DX7) | grepl(!1113, DX8) | grepl(!1113, DX9) | grepl(!1113, DX10))
我用了“!” 因为我认为这意味着“否定”或选择那些没有此 ID 的人。
当我运行它时,它给了我 0 个观察结果——有人可以帮忙吗?
我也尝试过这样做dataframe1<- filter(dataframe1, !(DX1:DX30 %in% 1111:1113))
,这给了我这个信息:
“错误:向量内存耗尽(达到限制?)”
解决方案
这是一个基本的 R 方式。
not_wanted <- 1111:1113
inx <- apply(dataframe1, 1, function(x) all(!x %in% not_wanted))
dataframe1[inx, ]
# DX1 DX2 DX3 DX4
#9 1116 1115 1115 1116
注意:如果性能很重要,R 矩阵访问比 data.frame 访问更快。
先强制
mat1 <- dataframe1
将使这段代码的速度加倍。
测试数据
set.seed(2021)
dataframe1 <- replicate(4, sample(1111:1116, 20, TRUE))
dataframe1 <- as.data.frame(dataframe1)
names(dataframe1) <- paste0("DX", 1:4)
推荐阅读
- r - R根据多个条件减去值
- ios - Swift/MySql/PHP - “无法读取数据,因为它的格式不正确。” 错误
- java - 使用 Retrofit 2.0 在正文中发布请求 JSON
- c - 使用 Flex 编译器时的编译问题
- python-3.x - 如何从 csv 文件(2020 年 1 月到 2020 年 3 月)计算给定月份和天数列之间的天数?
- r - 如何“四舍五入”ggplot中的范围线
- html - CSS:为什么视图外观会因更改固定尺寸的浏览器宽度而改变?
- qt - 遇到多重采样时没有有用的 QOpenGLFramebufferObject::blitFramebuffer() 和 texture()
- java - 如何使用带 LatLng 的 SharedPreferences(错误)
- python - Kivy App 使用 buildozer 构建后未运行