r - 使用 dplyr grep 术语列表、分组和汇总值
问题描述
我有一个看起来像这样的表:
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
我想要做的是 grep 列表中每个项目的每一行并计算平均值(值列)。像这样:
term mean
1 dog 8.0
2 fish 4.5
3 eel 26.5
每个有 a 的实例都会'dog'
计算mean
.value
像这样的东西不起作用:
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
推荐阅读
- javascript - 如何使用 azure 函数将 HTTP 查询参数插入 azure sql db
- docker - 在另一台主机上的 Netflix eureka 服务发现服务器中远程 dockerised spring boot 应用程序注册
- python - Python:如何删除 tkinter 图标
- node.js - 使用本地开发 npm 模块
- ruby - 拆分字符串时忽略空捕获
- c# - 在 IIS 服务器上部署站点在为 umbraco 休息服务保存样式表时抛出 404
- angular - 如何读取角度 5 中可观察的值以显示或隐藏错误消息
- javascript - Angular - 动态注入内容到
零件 - c# - 如何解决限制为从 Azure ServiceBus 读取 1 个客户端的问题
- java - Proteus 中的 Arduino Uno 发送 � 字符