我有一个数据集,格式如下:
library(dplyr)
set.seed(420)
data <- data.frame(duration = c(3, 5, 6, 8, 10),
rate = c(0.2, 0.5, 0.8, 0.85, 0.9)) %>%
slice_sample(n = 705, replace = TRUE) %>%
rowwise() %>%
mutate(cured = sample(0:1, 1, prob = c(1 - rate, rate))) %>%
select(-rate)
head(data)
duration cured
<dbl> <int>
1 10 1
2 10 1
3 5 1
4 3 1
5 10 0
6 10 1
我想用duration
来总结1的个数和总数(注意这是一个数字而不是一个因子,但总是整数)。我可以这样做:
data %>%
group_by(duration) %>%
summarise(n = n(),
npos = sum(cured, na.rm = TRUE),
rate = npos / n)
duration n npos rate
<dbl> <int> <int> <dbl>
1 3 139 30 0.216
2 5 130 79 0.608
3 6 143 123 0.860
4 8 155 127 0.819
5 10 138 118 0.855
这很好用,但是我遇到了列名duration
和cured
不一定要这样命名的情况,所以我想将其作为变量传入。(这最终将在一个包中)。此外,如果cured
中缺少数据,可以从摘要中的n
和npos
列中完全忽略它。
最后,我使用pull(rate)
将rate
列作为一个向量-是否有一个基R等价物?
2条答案
按热度按时间2hh7jdfx1#
我们可以使用
aggregate
,并使用[[
进行提取,例如像这样:输出:
9njqaruj2#
下面是使用
mean
的另一种方法:1.我们
aggregate
列x
由y
。1.然后我们应用
mean
来计算每组中的平均值。1.最后我们提取第二列。