我有一张表df,如下所示:
a <- c(10,20, 20, 20, 30)
b <- c("u", "u", "u", "r", "r")
c <- c("a", "a", "b", "b", "b")
df <- data.frame(a,b,c)
我想创建一个包含col a平均值的新表,按变量c分组。我希望有一个列,其中包含每个组中b类型的出现次数c。 因此,我希望结果表看起来像df2:
a_m <- c(15, 23.3)
c <- c("a", "b")
counts_b <-c("2 u", "1 u, 2 r")
df2 <- data.frame(a_m, c, counts_b)
到目前为止我所拥有的是:
df2 <- df %>% group_by(c) %>% summarise(a_m = mean(a, na.rm = TRUE))
我不知道如何在示例df2中添加列counts_b。
朱
答案 0 :(得分:2)
这是使用一点table
魔法的方法:
df %>%
group_by(c) %>%
summarise(a_mean = mean(a),
b_list = paste(names(table(b)), table(b), collapse = ', '))
# A tibble: 2 x 3
c a_mean b_list
<fct> <dbl> <chr>
1 a 15.0 r 0, u 2
2 b 23.3 r 2, u 1
答案 1 :(得分:1)
以下是使用reshape2
的另一种解决方案。输出格式可能更方便使用,b的每个值都有自己的列和出现次数。
out1 <- dcast(df, c ~ b, value.var="c", fun.aggregate=length)
c r u
1 a 0 2
2 b 2 1
out2 <- df %>% group_by(c) %>% summarise(a_m = mean(a))
# A tibble: 2 x 2
c a_m
<fctr> <dbl>
1 a 15.00000
2 b 23.33333
df2 <- merge(out1, out2, by=c)
c r u a_m
1 a 0 2 15.00000
2 b 2 1 23.33333