我有一个小标题,其中包含一个id
列和一个捕获人们输入的text_entry
的列。
目标:将每个人的text_entry
与key
进行比较,并计算出完全个键入单词的数量。
例如,如果我的输入是:
df <- tribble(~id, ~text_entry,
1, "It was a Saturday night in December.",
2, " It was a Saturday night",
3, "It wuz a Sturday nite in",
4, "IT WAS A SATURDAY",
5, "was a Saturday"); df
key <- "It was a Saturday night in December."
然后,我需要以下内容:
df2 <- tribble(~id, ~text_entry, ~words_correct,
1, "It was a Saturday night in December.", 7, # whole string perfect
2, " It was a Saturday night", 5, # first 5 words perfect
3, "It wuz a Sturday nite in", 3, # misspelled "was", "Saturday" and "night"
4, "IT WAS A SATURDAY", 0, # case-sensitive
5, "was a Saturday", 3); df2 # ok to start several words into the key
我完全采用stringr
/ stringi
解决方案。 tidyverse
始终是首选,但我迫切需要任何解决方案。
非常感谢,非常感谢您提前提供帮助和见解!
答案 0 :(得分:1)
一种方法是在空白处分割字符串,并用key
计算常用字数。
library(tidyverse)
keywords <- strsplit(key, '\\s+')[[1]]
df %>%
mutate(text = str_split(text_entry, '\\s+'),
words_correct = map_dbl(text, ~sum(.x %in% keywords)))
# A tibble: 5 x 3
# id text_entry words_correct
# <dbl> <chr> <dbl>
#1 1 "It was a Saturday night in December." 7
#2 2 " It was a Saturday night" 5
#3 3 "It wuz a Sturday nite in" 3
#4 4 "IT WAS A SATURDAY" 0
#5 5 "was a Saturday" 3
我们也可以在基数R中执行此操作:
df$words_correct <- sapply(strsplit(df$text_entry, '\\s+'),
function(x) sum(x %in% keywords))
答案 1 :(得分:1)
您可以提取非空间部分并将其传递给str_detect()
。
library(tidyverse)
df %>%
mutate(words_correct = map_dbl(str_extract_all(text_entry, "[^\\s]+"),
~ sum(str_detect(key, .))))
# # A tibble: 5 x 3
# id text_entry words_correct
# <dbl> <chr> <dbl>
# 1 1 "It was a Saturday night in December." 7
# 2 2 " It was a Saturday night" 5
# 3 3 "It wuz a Sturday nite in" 3
# 4 4 "IT WAS A SATURDAY" 0
# 5 5 "was a Saturday" 3