r - 使用 dplyr 获取术语列表、分组依据和汇总值

我有一个看起来像这样的表:

  ID          term value
1  A cat,dog,snake    10
2  B       cat,eel    50
3  C      fish,eel     3
4  D      fish,dog     6

data.frame(ID = c("A", "B", "C", "D"),
           term = c("cat,dog,snake", "cat,eel", "fish,eel", "fish,dog"),
           value = c(10, 50, 3, 6))

我有一个感兴趣的列表:

dog
fish
eel

我想要做的是为列表中的每个项目搜索每一行并计算平均值(值列)。像这样:

  term mean
1  dog  8.0
2 fish  4.5
3  eel 26.5

在每个有 'dog' 的实例中,它都会计算 valuemean

这样的东西是行不通的:

df %>% 
  group_by(., grepl(list, term)) %>% 
  summarise(mean = mean(value))

我不想做的是将每个术语分开到它自己的行中,因为术语的某些行有 100 多个选项。所以我能想到的唯一有效方法是通过 grep 搜索进行分组。虽然也许我错了......

最佳答案

也许是这样的?

mylist <- c("dog", "fish", "eel")
pattern <- paste0(mylist, collapse = "|")


df %>% 
  separate_rows(term) %>% 
  group_by(term = str_extract(term, pattern)) %>% 
  summarise(mean = mean(value, na.rm = TRUE)) %>% 
  na.omit()

library(dplyr)

mylist <- c("dog", "fish", "eel")

df %>% 
  separate_rows(term) %>% 
  group_by(term) %>% 
  summarise(mean = mean(value, na.rm = TRUE)) %>% 
  filter(term %in% mylist)
 term   mean
  <chr> <dbl>
1 dog     8  
2 eel    26.5
3 fish    4.5

https://stackoverflow.com/questions/69697448/

相关文章:

spring-boot - 应用程序通过 Spring Boot Run 而不是通过 Intelli

typescript - 如何从Nuxt 3服务器获取路由参数

r - 在 download.file 中关闭 SSL 验证

html - 是否可以使用纯 CSS 为仅包含一个元素的列表设置样式,而不是为包含多个元素的列表设置

typescript - 类型错误 : EventEmitter is not a construc

java - org.gradle.api.internal.tasks.testing.TestS

java - 将 Enum 类名本身作为 String 获取的最佳方法

r - 如何调整饼图上的 ggrepel 标签?

haskell - 不同类型的重载/多态函数

c++ - std::vector 和 move 语义