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
withgrepl
tosubset
行中与条件匹配的每个值使用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
withgrepl
tosubset
行中与条件匹配的每个值使用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())}