在这个数据框中,在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