【发布时间】:2017-07-10 01:28:44
【问题描述】:
我一直没有成功尝试使用dplyr 和grep 库过滤我的数据框,并使用我的数据框多列中的字符串列表。我认为这是一项简单的任务,但要么没有人问过我的具体问题,要么不像我最初想象的那么容易。
对于下面的数据框...
foo <- data.frame(var.1 = c('a', 'b',' c'),
var.2 = c('b', 'd', 'e'),
var.3 = c('c', 'f', 'g'),
var.4 = c('z', 'a', 'b'))
... 我希望能够逐行过滤以查找包含所有三个变量 a、b 和 c 的行。 我寻求的答案只会返回第 1 行,因为它包含 a、b 和 c,而不返回第 2 行和第 3 行,即使它们包含三个寻求变量中的两个,它们也不包含所有三个变量同一行。
我遇到了grep 只允许一次指定向量或一列的问题,而我真的只关心在同一行的许多列中查找字符串。
我还使用dplyr 到filter 使用%in%,但它只会在任何变量存在时返回:
foo %>%
filter(var.1 %in% c('a', 'b', 'c') |
var.2 %in% c('a', 'b', 'c') |
var.3 %in% c('a', 'b', 'c'))
感谢您的任何帮助,如果您需要任何说明,请告诉我!
【问题讨论】:
-
foo[apply(foo, 1, function(x) all(c('a', 'b', 'c') %in% x)), ] -
apply( foo, 2, function(x) all( grepl(x = x, pattern = "[abc]" ) )) -
apply( foo, 2, function(x) sum( grepl(x = x, pattern = "[abc]" ) ) == 3)