r - 如果具有名称的列包含部分值,则保留行
问题描述
我有一个数据集:
Camp1 Ade2 Camp3 Ade4
dA 1 eB 2
dB 4 uC 8
gB 3 NA NA
如果名称中包含“Camp”的列名不包含值“A”或“B”或 NA,我如何子集此数据集,排除这些行。
我知道如何做到完全匹配,但不是部分匹配。
cols = grepl("Camp", names(df))
rows = rowSums(df[, cols] == "A" |
df[, cols] == "B" |
is.na(df[, cols])) == sum(cols)
df<-df[rows, ]
我如何做等效但部分匹配?
预期输出:
Camp1 Ade2 Camp3 Ade4
dA 1 eB 2
gB 3 NA NA
解决方案
我们可以使用filter_at
from dplyr
。使用starts_with
辅助函数,我们将过滤器应用于以 . 开头的每一列'Camp'
。在这些列上,我们过滤all_vars
包含A
orB
或的行NA
:
library(dplyr)
df %>%
filter_at(vars(starts_with("Camp")), all_vars(grepl('A|B', .) | is.na(.)))
输出:
Camp1 Ade2 Camp3 Ade4
1 dA 1 eB 2
2 gB 3 <NA> NA
数据:
df <- structure(list(Camp1 = structure(1:3, .Label = c("dA", "dB",
"gB"), class = "factor"), Ade2 = c(1L, 4L, 3L), Camp3 = structure(c(1L,
2L, NA), .Label = c("eB", "uC"), class = "factor"), Ade4 = c(2L,
8L, NA)), class = "data.frame", row.names = c(NA, -3L))
推荐阅读
- java - 写作清单
在 csv java 中使用 CsvPrinter - azure - 无论路径如何,Azure 管道触发器都包括
- php - 如何使用 phpunit 测试确保数据通过查看在 laravel 中具有特定键
- android - 将循环结果添加到变量
- node.js - 使用 fluen-ffmpeg 在视频上叠加视频(在左上或右上)
- python - 有没有办法知道哪些列有不同的数据类型可以合并?Python - 熊猫
- java - 正则表达式以匹配具有非数字字符和可变数字的精确字符串
- r - 如何将多个相同类型的 pdata 身份添加到一个样本中,并在绘图时能够通过这些身份进行区分
- dart - 我在飞镖中遇到了这个问题,有解决方案吗?
- python - 如何在python中处理来自航拍图像的gcp点列表?