r - 为什么这个(分组的)mutate_at 语法有效但 summarise_at 失败?
问题描述
示例数据:
(tmp_df <-
expand.grid(id = letters[1:3], y = 1:3))
# id y
# 1 a 1
# 2 b 1
# 3 c 1
# 4 a 2
# 5 b 2
# 6 c 2
# 7 a 3
# 8 b 3
# 9 c 3
以下作品:
tmp_df %>%
group_by(id) %>%
mutate_at(which(colnames(.) %in% c("y")),
sum)
# id y
# <fct> <int>
# 1 a 6
# 2 b 6
# 3 c 6
# 4 a 6
# 5 b 6
# 6 c 6
# 7 a 6
# 8 b 6
# 9 c 6
但以下引发错误Error: Only strings can be converted to symbols
:
tmp_df %>%
group_by(id) %>%
summarise_at(which(colnames(.) %in% c("y")),
sum)
请注意,以下代码片段是成功生成预期结果的替代方法:
tmp_df %>%
group_by(id) %>%
summarise_at(vars(y),
sum)
tmp_df %>%
group_by(id) %>%
summarise_at("y",
sum)
编辑:按照 akrun 的回答,我应该注意我使用的 dplyr 版本是dplyr_0.8.4
解决方案
似乎在mutate_at
列号中包含了分组变量,但summarize_at
它们并没有像下面的两行代码一样工作。尽管 _at 函数已被across
我不知道是否会修复,但您可以报告此错误。
tmp_df %>% group_by(id) %>% mutate_at(2, sum)
tmp_df %>% group_by(id) %>% summarize_at(1, sum)
如果我们交换列,那么它们都会一致地工作,因为分组变量不再影响 y 列的位置,这一事实进一步强化了这一点。
tmp_df[2:1] %>% group_by(id) %>% mutate_at(1, sum)
tmp_df[2:1] %>% group_by(id) %>% summarize_at(1, sum)
推荐阅读
- c++ - 使用 C++ 在结构中存储 UDP 数据包
- javascript - PHP | DOMDocument - 从正文中获取 JSON 数据
- java - Currency.getSymbol() 返回 "US$"
- r - 算术运算的c ++性能不佳
- python - “ndarray”类型的对象不是 JSON 可序列化的
- node.js - 将所有multer上传的文件移动到Nodejs中的新目的地
- c - CIVL 在 OpenMP 程序中检测到数据竞争 - 是否正确?
- mysql - MySQL UNION ALL 与大型数据库上的多重 SELECT 性能
- python - Python Selenium 在浏览器关闭时检测
- java - 如何使用来自其他元素值的条件编辑 xml