我一直在尝试使用R中的dplyr来过滤一个包含一些空(NA)单元格的大型 Dataframe ,我想使用的字符串是一个包含几个字母数字搜索项的向量。
- 我的目标是创建一个新的数据框或行的tibble,这些行在数据框的任何列中包含向量中的任何字符串。**
我已经尝试了几种方法来处理无法共享的数据框,但我在另一个问题中找到了答案,除了使用向量作为搜索项之外,* 几乎 * 满足了我的需要。
从Filter rows which contain a certain string开始:
筛选任何列都满足条件的行
ggplot2::diamonds %>%
filter(if_any(everything(), ~ grepl('V',.))) %>%
head()
#> # A tibble: 6 × 10
#> carat cut color clarity depth table price x y z
#> <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
#> 2 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
#> 3 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
#> 4 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
#> 5 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
#> 6 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
如果我不想用V作为搜索项,而是想过滤向量中任何值的匹配项,该怎么办?
vector1 <- c("V", "F", "G", "E")
我在自己的数据框上尝试了一些对一个值有效的方法,但在使用矢量作为搜索项时无效:
dfdiamonds <- as.dataframe (ggplot2::diamonds)
`your text`test1 <- dfdiamonds %>%
rowwise() %>%
filter(any(c_across(cols=everything()) %in% c(vector1)
test2<- for(item in vector1) {
dfdiamonds %>%
rowwise() %>%
filter(any(c_across(cols=2) == item))
}
test3 <- filter(dfdiamonds, any(c_across(cols = everything()) %in% c(vector1))
#I tried grep for this one and it gave a result as a value rather than a data frame
matches <- unique (grep(paste(vector1,collapse="|"),
dfdiamonds, value=TRUE))
反正我也没办法,什么办法都行!
2条答案
按热度按时间gpfsuwkq1#
以下是您需要的:
mwkjh3gx2#
在这种情况下,最简单的解决方案可能是:
创建于2023年1月24日,使用reprex v2.0.2