按列名对包含字符串的行进行子集化 - Grepl
Subsetting rows containing string By Column Names - Grepl
我有如下数据框:
有 200 多列,这只是一个示例。
Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA
如何 filter/subset 这个数据集,以便根据包含 -A
的列,删除包含除 BA
或 NA
以外的任何内容的行。
最终预期输出:
Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
9 10 BA 4 NA
这里有一个非常简单的方法:
cols = grepl("-A", names(dd))
rows = rowSums(dd[, cols] == "BA" | is.na(dd[, cols])) == sum(cols)
dd[rows, ]
# Col1 Col2 Col2-A Col3 Col3-A
# 1 1 3 BA 0 BA
# 2 2 5 BA 1 <NA>
# 5 9 10 BA 4 <NA>
使用此数据:
dd = read.table(header = T, text = 'Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA', check.names = F)
使用 dplyr
你可以:
df %>%
filter_at(vars(contains(".A")), all_vars(grepl("BA", .) | is.na(.)))
Col1 Col2 Col2.A Col3 Col3.A
1 1 3 BA 0 BA
2 2 5 BA 1 <NA>
3 9 10 BA 4 <NA>
它根据包含“.A”的变量进行过滤,并保留所有变量为 "BA" 或 NA 的行。
或基于来自@Gregor 的 post 的简化版本:
df %>%
filter_at(vars(contains(".A")), all_vars(. == "BA" | is.na(.)))
示例数据:
df <- read.table(text = "Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA", header = TRUE, stringsAsFactors = FALSE)
我有如下数据框:
有 200 多列,这只是一个示例。
Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA
如何 filter/subset 这个数据集,以便根据包含 -A
的列,删除包含除 BA
或 NA
以外的任何内容的行。
最终预期输出:
Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
9 10 BA 4 NA
这里有一个非常简单的方法:
cols = grepl("-A", names(dd))
rows = rowSums(dd[, cols] == "BA" | is.na(dd[, cols])) == sum(cols)
dd[rows, ]
# Col1 Col2 Col2-A Col3 Col3-A
# 1 1 3 BA 0 BA
# 2 2 5 BA 1 <NA>
# 5 9 10 BA 4 <NA>
使用此数据:
dd = read.table(header = T, text = 'Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA', check.names = F)
使用 dplyr
你可以:
df %>%
filter_at(vars(contains(".A")), all_vars(grepl("BA", .) | is.na(.)))
Col1 Col2 Col2.A Col3 Col3.A
1 1 3 BA 0 BA
2 2 5 BA 1 <NA>
3 9 10 BA 4 <NA>
它根据包含“.A”的变量进行过滤,并保留所有变量为 "BA" 或 NA 的行。
或基于来自@Gregor 的 post 的简化版本:
df %>%
filter_at(vars(contains(".A")), all_vars(. == "BA" | is.na(.)))
示例数据:
df <- read.table(text = "Col1 Col2 Col2-A Col3 Col3-A
1 3 BA 0 BA
2 5 BA 1 NA
3 7 BA 0 JN
5 9 KD 1 BA
9 10 BA 4 NA", header = TRUE, stringsAsFactors = FALSE)