0
我想为数据集中的每个任务想出一个总和,该数据集只使用总和中一次观察到的最大值。如果还不清楚,我提供了一个下面所需输出的例子。R:使用dplyr对应唯一向量条目的总和值
样本数据
dat <- data.frame(task = rep(LETTERS[1:3], each=3),
id = c(rep(1:2, 4) , 3),
value = c(rep(c(10,20), 4), 5))
dat
task id value
1 A 1 10
2 A 2 20
3 A 1 10
4 B 2 20
5 B 1 10
6 B 2 20
7 C 1 10
8 C 2 20
9 C 3 5
我找到问题的答案,但它需要两个独立的group_by()
功能。有没有办法让一个group_by()
获得相同的输出?原因是我有其他汇总度量标准对分组很敏感,我不能在同一个管道中运行两个不同的group_by
函数。
dat %>%
group_by(task, id) %>%
summarize(v = max(value)) %>%
group_by(task) %>%
summarize(unique_ids = n_distinct(id),
value_sum = sum(v))
# A tibble: 3 × 3
task unique_ids value_sum
<chr> <int> <dbl>
1 A 2 30
2 B 2 30
3 C 3 35
Fyi,长度(unique(x))在dplyr中有n_distinct。我认为这可以通过删除重复项来解决:'dat%>%distinct%>%group_by(task)%>%summarize(n = n(),s = sum(value))''。就其他度量方式阻碍这一点而言,我认为这来自于确实应该有多个表(例如,用于'id's及其属性)的决定。您可能想阅读哈德利关于“整理数据”的论文 – Frank
感谢您提供'n_distinct'的提示。我不能删除重复的行,因为我需要总结的其他列取决于所保留的所有行。 –