【发布时间】:2017-12-30 11:13:17
【问题描述】:
尝试根据之前的分组有条件地求和。很难想出它。
在按 f 分组后,我正在尝试根据 r1 中的哪些列来对 amt 列求和。
可重现的代码:
s <- sample(c('one', 'two'), 96, replace = TRUE)
f <- sample(c('a','s','d','f'), 96, replace = TRUE)
r1_amt <- runif(96, 1, 100)
r2_amt <- runif(96, 1, 100)
r3_amt <- runif(96, 1, 100)
x <- data_frame(s, f, r1_amt, r2_amt, r3_amt)
smy <- x %>%
group_by(f) %>%
summarise(n = n(), # population in each f group
num_r1 = sum(r1_amt >= 50)) # amount of r1 in each f group
我尝试了.[r1_amt >= 50]$amt、cumsum(r1_amt >= 50)、sum(ifelse(r1_amt >= 50, r1_amt, 0)),但无法得出分组数字。
因此,给定的 1 行对于 r1 可能是 60,对于 r2 可能是 40,对于 r3 可能是 55,如果有意义的话,它应该只包含在总和列中 r1 和 r3。
【问题讨论】:
-
你的预期输出是什么?
-
我调整了可重现的示例,因为我做得不太正确。如果 r1_amt 中有超过 50 个,我想将给定的观察分类为 r1。然后 sum_r1_amt 列应该是 r1_amt 的总和,前提是观察值高于 50。
-
@MattW。如果您想更改您的问题,请询问另一个问题作为跟进。 16 小时后回来编辑您的问题是不专业的。修改我的答案以解决您的新问题并不难,但我会把它留给您,或者,也许,其他答案。
-
为了使您的代码可重现,请考虑在开头使用
set.seed(10),以便我们在重现时得到相同的答案。更好的是让示例足够简单,以便您可以手动计算答案是什么,以便更容易理解所需的输出是什么。
标签: r dataframe dplyr grouping summarize