dplyr环路滤波*

dplyr环路滤波*,r,regex,for-loop,dplyr,R,Regex,For Loop,Dplyr,我使用dplyr和for循环的组合来子集数据库。 我想对整个数据集执行第一个操作。我的正则表达式循环失败。解决办法是什么 library(dplyr) df <- data.frame(values=c("a","b","c")) select <- c("*","a") for (i in 1:length(select)){ print(df %>% filter(values %in% select[i]) %>% summarise(n()))} 一个选项

我使用
dplyr
和for循环的组合来子集数据库。 我想对整个数据集执行第一个操作。我的正则表达式循环失败。解决办法是什么

library(dplyr)
df <- data.frame(values=c("a","b","c"))
select <- c("*","a")

for (i in 1:length(select)){
  print(df %>% filter(values %in% select[i]) %>% summarise(n()))}

一个选项是将
粘贴到
开头的
,然后使用
str\u detect
grepl
过滤行

library(dplyr)
library(stringr)
df %>%
    filter(str_detect(values, str_c(".", select[1]))) %>%
    summarise(n = n())
# n
#1 3

或者,不要使用
*
,而是在“选择”中指定为
,因为
匹配任何字符,而
*
表示前面字符的0个或多个字符

select <- chartr('*', '.', select)
for (i in seq_along(select)){ print(df %>% 
            filter(str_detect(values, select[i])) %>%
            summarise(n()))}
#   n()
#1   3
# n()
#1   1

一个选项是将
粘贴到
开头的
,然后使用
str\u detect
grepl
过滤行

library(dplyr)
library(stringr)
df %>%
    filter(str_detect(values, str_c(".", select[1]))) %>%
    summarise(n = n())
# n
#1 3

或者,不要使用
*
,而是在“选择”中指定为
,因为
匹配任何字符,而
*
表示前面字符的0个或多个字符

select <- chartr('*', '.', select)
for (i in seq_along(select)){ print(df %>% 
            filter(str_detect(values, select[i])) %>%
            summarise(n()))}
#   n()
#1   3
# n()
#1   1

在base R中,我们可以使用
lappy
select
with
grepl
to
subset
行中与条件匹配的每个值使用
lappy

for (i in seq_along(select)){ print(df %>% 
             filter(if(!select[i] %in% values) TRUE else values %in% select[i]) %>%
            summarise(n()))}

# n()
#1   3
#  n()
#1   1
lapply(select, function(x) subset(df, grepl(x, values)))

#[[1]]
#  values
#1      a
#2      b
#3      c

#[[2]]
#  values
#1      a

你也可以考虑在“代码”中添加单词边界>选择< /代码>,如果你想精确匹配单词,不希望<代码>“a”/代码>与<代码>匹配“ab”<代码> >

lapply(paste0("\\b", select, "\\b"), function(x) subset(df, grepl(x, values)))

在base R中,我们可以使用
lappy
select
with
grepl
to
subset
行中与条件匹配的每个值使用
lappy

for (i in seq_along(select)){ print(df %>% 
             filter(if(!select[i] %in% values) TRUE else values %in% select[i]) %>%
            summarise(n()))}

# n()
#1   3
#  n()
#1   1
lapply(select, function(x) subset(df, grepl(x, values)))

#[[1]]
#  values
#1      a
#2      b
#3      c

#[[2]]
#  values
#1      a

你也可以考虑在“代码”中添加单词边界>选择< /代码>,如果你想精确匹配单词,不希望<代码>“a”/代码>与<代码>匹配“ab”<代码> >

lapply(paste0("\\b", select, "\\b"), function(x) subset(df, grepl(x, values)))
好的,这适用于df%summary(n())}好的,这适用于df%summary(n())}