在dplyr中使用filter()查找grepl值的第一个匹配项,并返回该值和所有后续行

在dplyr中使用filter()查找grepl值的第一个匹配项,并返回该值和所有后续行,r,dataframe,filter,dplyr,grepl,R,Dataframe,Filter,Dplyr,Grepl,我正在尝试使用dplyr按组过滤数据帧,其中捕获行中第一次出现的字符串“ReadingOnset”,并将其和所有后续行传递到新的数据帧中 Text_Stimuli <- structure(list(Name = c("Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1",

我正在尝试使用dplyr按组过滤数据帧,其中捕获行中第一次出现的字符串“ReadingOnset”,并将其和所有后续行传递到新的数据帧中

Text_Stimuli <- structure(list(Name = c("Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", 
"Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1", "Sub1"
), StimulusName = c("GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", "GenLie20", 
"GenLie20"), StimuliBlock = c("Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4", "Block_4", "Block_4", "Block_4", "Block_4", 
"Block_4", "Block_4"), Reading_Onset = c("", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", 
"", "", "", "", "", "", "", "", "ReadingOnset", "", "", "", "", 
"", "", "")), row.names = c(NA, -101L), vars = c("Name", "StimulusName", 
"StimuliBlock"), drop = TRUE, indices = list(0:100), group_sizes = 101L, biggest_group_size = 101L, labels = structure(list(
    Name = "Innocent Subject 15", StimulusName = "GenLie20", 
    StimuliBlock = "Block_4"), row.names = c(NA, -1L), class = "data.frame", vars = c("Name", 
"StimulusName", "StimuliBlock"), drop = TRUE), class = c("grouped_df", 
"tbl_df", "tbl", "data.frame"))

Text\u刺激您可以使用您的数据集尝试以下方法:

library(dplyr)
library(stringr)
library(zoo)
df %>% filter(ifelse(str_detect(Reading_Onset,"ReadingOnset"),TRUE,NA) %>%
              na.locf(na.rm=FALSE))

## A tibble: 8 x 4
## Groups:   Name, StimulusName, StimuliBlock [1]
#  Name                StimulusName StimuliBlock Reading_Onset
#  <chr>               <chr>        <chr>        <chr>        
#1 Innocent Subject 15 GenLie20     Block_4      ReadingOnset 
#2 Innocent Subject 15 GenLie20     Block_4      ""           
#3 Innocent Subject 15 GenLie20     Block_4      ""           
#4 Innocent Subject 15 GenLie20     Block_4      ""           
#5 Innocent Subject 15 GenLie20     Block_4      ""           
#6 Innocent Subject 15 GenLie20     Block_4      ""           
#7 Innocent Subject 15 GenLie20     Block_4      ""           
#8 Innocent Subject 15 GenLie20     Block_4      ""
库(dplyr)
图书馆(stringr)
图书馆(动物园)
df%>%过滤器(如果其他(str\u检测(读取开始,“读取插入”),真,NA)%>%
na.locf(na.rm=FALSE))
##一个tibble:8x4
##组:名称、刺激名称、刺激块[1]
#名称刺激名称刺激块阅读开始
#                                         
#1无辜受试者15 GenLie20 Block_4读数输入
#2无辜受试者15 GenLie20 Block_4“
#3无辜受试者15 GenLie20 Block_4“
#4无辜受试者15 GenLie20 Block_4“
#5无辜受试者15 GenLie20 Block_4“
#6无辜受试者15 GenLie20 Block_4“
#7无辜受试者15 GenLie20 Block_4“
#8无辜受试者15 GenLie20 Block_4“

您可以使用数据集尝试以下操作:

library(dplyr)
library(stringr)
library(zoo)
df %>% filter(ifelse(str_detect(Reading_Onset,"ReadingOnset"),TRUE,NA) %>%
              na.locf(na.rm=FALSE))

## A tibble: 8 x 4
## Groups:   Name, StimulusName, StimuliBlock [1]
#  Name                StimulusName StimuliBlock Reading_Onset
#  <chr>               <chr>        <chr>        <chr>        
#1 Innocent Subject 15 GenLie20     Block_4      ReadingOnset 
#2 Innocent Subject 15 GenLie20     Block_4      ""           
#3 Innocent Subject 15 GenLie20     Block_4      ""           
#4 Innocent Subject 15 GenLie20     Block_4      ""           
#5 Innocent Subject 15 GenLie20     Block_4      ""           
#6 Innocent Subject 15 GenLie20     Block_4      ""           
#7 Innocent Subject 15 GenLie20     Block_4      ""           
#8 Innocent Subject 15 GenLie20     Block_4      ""
库(dplyr)
图书馆(stringr)
图书馆(动物园)
df%>%过滤器(如果其他(str\u检测(读取开始,“读取插入”),真,NA)%>%
na.locf(na.rm=FALSE))
##一个tibble:8x4
##组:名称、刺激名称、刺激块[1]
#名称刺激名称刺激块阅读开始
#                                         
#1无辜受试者15 GenLie20 Block_4读数输入
#2无辜受试者15 GenLie20 Block_4“
#3无辜受试者15 GenLie20 Block_4“
#4无辜受试者15 GenLie20 Block_4“
#5无辜受试者15 GenLie20 Block_4“
#6无辜受试者15 GenLie20 Block_4“
#7无辜受试者15 GenLie20 Block_4“
#8无辜受试者15 GenLie20 Block_4“

我无法判断您是否需要在ReadingOnset之前和包括ReadingOnset在内的所有内容,或者是否需要在ReadingOnset之后和包括ReadingOnset在内的所有内容,因此我将两者都显示出来

之前的一切,包括:

library(dplyr)

Text_Stimuli %>% 
  filter(row_number() <= which(grepl("ReadingOnset", Reading_Onset)))
Text_Stimuli %>% 
  filter(row_number() >= which(grepl("ReadingOnset", Reading_Onset)))

我们所做的只是根据“ReadingOnset”所在的行号进行过滤。

我无法判断您是否需要在ReadingOnset之前和之后的所有内容,包括ReadingOnset,所以我将两者都显示出来

之前的一切,包括:

library(dplyr)

Text_Stimuli %>% 
  filter(row_number() <= which(grepl("ReadingOnset", Reading_Onset)))
Text_Stimuli %>% 
  filter(row_number() >= which(grepl("ReadingOnset", Reading_Onset)))

我们所做的只是根据“ReadingOnset”所在的行号进行过滤。

您能阅读并发布您的数据的最小子集以制作一个可运行的示例吗?谢谢Oliver。我马上就去!请您阅读并发布您的数据的最小子集以制作一个可运行的示例,好吗?谢谢Oliver。我马上就去!