R 如果后跟另一个单元格匹配项,则查找单元格匹配项

R 如果后跟另一个单元格匹配项,则查找单元格匹配项,r,R,我有一个dataframe,它是使用pdftools从PDF转换而来的会议记录列表,其中包含一系列未列出的单词,如下所示: document\u id我们可以通过使用当前行和下一行(lead)以及sum逻辑向量创建一个逻辑表达式来计算“leave”后跟“明天”的实例数 library(dplyr) library(stringr) df %>% summarise(Sum = sum(str_detect(word, 'leave') & str_detect(

我有一个dataframe,它是使用
pdftools
从PDF转换而来的会议记录列表,其中包含一系列未列出的单词,如下所示:


document\u id我们可以通过使用当前行和下一行(
lead
)以及
sum
逻辑向量创建一个逻辑表达式来计算“leave”后跟“明天”的实例数

library(dplyr)
library(stringr)
df %>%
 summarise(Sum = sum(str_detect(word, 'leave') &
         str_detect(lead(word), 'tomorrow'), na.rm = TRUE))

通过使用当前行和下一行(
lead
)以及
sum
逻辑向量创建一个逻辑表达式,我们可以计算“leave”后跟“tomory”的实例数

library(dplyr)
library(stringr)
df %>%
 summarise(Sum = sum(str_detect(word, 'leave') &
         str_detect(lead(word), 'tomorrow'), na.rm = TRUE))

感谢@akrun回答这个问题。 对于阅读本文的其他人,我还编写了代码,根据Akrun的代码按日期聚合单词出现的实例:

leave_in_转录本%突变(match=str_-detect(单词“leave”)和str_-detect(lead(单词),“明天”)

在成绩单%filter中保留(匹配==“TRUE”)


在成绩单中留下$match谢谢@akrun的回答。
对于阅读本文的其他人,我还编写了代码,根据Akrun的代码按日期聚合单词出现的实例:

leave_in_转录本%突变(match=str_-detect(单词“leave”)和str_-detect(lead(单词),“明天”)

在成绩单%filter中保留(匹配==“TRUE”)


leave_in_transcripts$match在base R中,我们可以使用
head
tail
来匹配当前行和下一行的值。我们可以
子集
匹配条件的行,并使用
as.Date
将数据从
文档id
转换为提供适当格式的日期对象。另外,由于您希望测试精确匹配而不是部分匹配,因此最好使用
=
而不是
grepl

transform(subset(df, c(head(word, -1) == "leave" & 
                       tail(word, -1) == "tomorrow", FALSE)), 
                 date = as.Date(document_id,"BOARD%Y%m%dmeeting.pdf"))

#               document_id  word       date
#1 BOARD19810203meeting.pdf leave 1981-02-03
如果您只想计算满足上述条件的次数,我们可以使用
sum

with(df, sum(head(word, -1) == "leave" & tail(word, -1) == "tomorrow"))

在baser中,我们可以使用
head
tail
来匹配当前行和下一行的值。我们可以
子集
匹配条件的行,并使用
as.Date
将数据从
文档id
转换为提供适当格式的日期对象。另外,由于您希望测试精确匹配而不是部分匹配,因此最好使用
=
而不是
grepl

transform(subset(df, c(head(word, -1) == "leave" & 
                       tail(word, -1) == "tomorrow", FALSE)), 
                 date = as.Date(document_id,"BOARD%Y%m%dmeeting.pdf"))

#               document_id  word       date
#1 BOARD19810203meeting.pdf leave 1981-02-03
如果您只想计算满足上述条件的次数,我们可以使用
sum

with(df, sum(head(word, -1) == "leave" & tail(word, -1) == "tomorrow"))

是的,对不起。刚刚做完。明白了吗?两排都排好了。对不起!所以我的想法是,如果明天休假的话,我想数一数。因此,预期的输出应该只是一个重复的“leave”字符串,但当然只有在它后面跟着“tomory”时,我当前的代码才这样做。可能您需要使用
lead
df%>%mutate(i1=str\u detect(word,'leave')&str detect(lead(word),'tomory'))
但正如我所说,我不清楚预期的输出,实际的列有170万行长。休假重复了大约1400次。所以我真的不知道如何修改我的代码来准确地反映我所拥有的。我只想计算一个单词的重复次数,如果它下面的单元格中有一个特定的单词。你知道怎么做吗?谢谢你的帮助!是的,对不起。刚刚做完。明白了吗?两排都排好了。对不起!所以我的想法是,如果明天休假的话,我想数一数。因此,预期的输出应该只是一个重复的“leave”字符串,但当然只有在它后面跟着“tomory”时,我当前的代码才这样做。可能您需要使用
lead
df%>%mutate(i1=str\u detect(word,'leave')&str detect(lead(word),'tomory'))
但正如我所说,我不清楚预期的输出,实际的列有170万行长。休假重复了大约1400次。所以我真的不知道如何修改我的代码来准确地反映我所拥有的。我只想计算一个单词的重复次数,如果它下面的单元格中有一个特定的单词。你知道怎么做吗?谢谢你的帮助!感谢@akrun让其他人读到这篇文章,我还编写了代码来聚合单词出现的实例:
leave_in_transcripts%mutate(match=str_detect(word,'leave')&str_detect(lead(word,'mounder'))
leave_in_transcripts%filter(match==“TRUE”)
leave_in_transcripts$match感谢@akrun阅读本文的其他人,我还编写了代码来聚合单词出现的实例:
leave_in_transcripts%mutate(match=str_detect(word,'leave')&str detect(lead(word),'tomory'))
leave_in_transcripts%filter(match==“TRUE”)
在成绩单中留下$match