r语言 - 如何根据条件识别子字符串的索引



在这个数据框中,在Turn列中有语音转录,在c5列中有词性标签,我想确定单词ta的索引,如果前加got:

df_test <- data.frame(
Turn = c("out tonight ? You 've got ta tell her .",
"Ta ta Sheila ."),
c5 = c("AVP AV0 PNP VHB VVN TO0 VVI PNP",
"ITJ ITJ NP0"), stringsAsFactors = FALSE
)

我首先将两列拆分为'words':

library(stringr)
df_test$Turns_split <- lapply(gsub("\s[.,;:?!]", "", df_test$Turn), function(x) unlist(str_split(x, " ")))
df_test$c5_split <- lapply(df_test$c5, function(x) unlist(str_split(x, " ")))

我知道如何识别任何ta的索引(即,是否前面有got):

df_test$Index <-  sapply(df_test$Turns_split, function(x) which(x %in% "ta"))
df_test$Index
[1] 6 2

但是我想将结果限制为紧跟在got之前的ta的实例,以便期望的结果是这样的:

df_test$Index
[1] 6

如何做到这一点?

您可以对Turns_split的每个值使用sapply,并获得当前单词为'ta'而前一个单词为'got'的索引。

sapply(df_test$Turns_split, function(x) which(x == 'ta' & dplyr::lag(x) == 'got')[1])
#[1]  6 NA

最新更新