【发布时间】:2018-04-29 01:39:14
【问题描述】:
我有一个包含两个变量的数据框,如下所示:
df <- data.frame(group=c(1,1,1,2,2,3,3,4),
type=c("a","b","a", "b", "c", "c","b","a"))
> df
group type
1 1 a
2 1 b
3 1 a
4 2 b
5 2 c
6 3 c
7 3 b
8 4 a
我想为每个组生成一个表格,将其在数据框中的类型组合显示为一个变量,例如
group alltypes
1 1 a, b
2 2 b, c
3 3 b, c
4 4 a
输出将始终以相同的顺序列出类型(例如,第 2 组和第 3 组得到相同的结果)并且不会重复(例如,第 1 组不是“a、b、a”)。
我尝试使用 dplyr 执行此操作并总结,但我不知道如何让它满足这两个条件 - 我尝试的代码是:
> df %>%
+ group_by(group) %>%
+ summarise(
+ alltypes = paste(type, collapse=", ")
+ )
# A tibble: 4 × 2
group alltypes
<dbl> <chr>
1 1 a, b, a
2 2 b, c
3 3 c, b
4 4 a
我也尝试将类型转换为一组单独的计数,但不确定这是否真的有用:
> df %>%
+ group_by(group, type) %>%
+ tally %>%
+ spread(type, n, fill=0)
Source: local data frame [4 x 4]
Groups: group [4]
group a b c
* <dbl> <dbl> <dbl> <dbl>
1 1 2 1 0
2 2 0 1 1
3 3 0 1 1
4 4 1 0 0
任何建议将不胜感激。
【问题讨论】:
-
尝试将 sort(unique(type)) 添加到您的第一个解决方案的粘贴调用中。
-
这次看起来没有问题,但为了将来参考,请包含创建数据集的代码(就像我添加的一样)并省略
>和+控制台字符,以便有人可以复制并粘贴您的示例代码来运行它。