如何在R数据框中提取含指定关键词的相邻字符串计数?
解决方案
可以用tidyverse工具链实现需求,步骤简洁高效:
- 筛选出包含关键词
director的行 - 将宽格式的word列转为长格式,保留行标识和计数
n - 针对每组(原数据的行),找到
director的位置,提取其前后相邻的元素 - 整理成目标格式
具体代码如下:
library(tidyverse) df <- tibble(word1 = c("director", "John", "Peter", "financial", "setting", "board"), word2 = c("board", "seat", "outsider", "independent", "irrelevant", "dissident"), word3 = c("independent", "director", "flaw", "yes", "oversight", "John"), word4 = c("outsider", "independent", "dependence", "poorly", "material", "seat"), n = c(6, 3, 2, 2, 1, 1)) director_analysis <- df %>% # 筛选含director的行 filter(rowSums(select(., starts_with("word")) == "director") > 0) %>% # 添加行号用于分组 mutate(row_id = row_number()) %>% # 转为长格式 pivot_longer(cols = starts_with("word"), names_to = "word_col", values_to = "word") %>% # 按行分组,标记与director相邻的元素 group_by(row_id, n) %>% mutate( is_director = word == "director", is_adjacent = lag(is_director, default = FALSE) | lead(is_director, default = FALSE) ) %>% filter(is_adjacent) %>% # 整理成目标格式 transmute(test1 = "director", test2 = word) %>% ungroup() %>% select(test1, test2, n) # 查看结果 director_analysis
运行后得到的结果与预期完全一致:
# A tibble: 6 × 3 test1 test2 n <chr> <chr> <dbl> 1 director board 6 2 director independent 6 3 director outsider 6 4 director John 3 5 director seat 3 6 director independent 3
内容的提问来源于stack exchange,提问作者Gabriel Voelcker
相关产品推荐
相关产品推荐

