创建由R中的另一个变量分组的变量的所有值的列表

She*_*ley 7 r dplyr

我有一个包含两个变量的数据框,如下所示:

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
Run Code Online (Sandbox Code Playgroud)

我想生成一个表格,显示每个组在数据框中具有的类型组合作为一个变量,例如

  group alltypes
1     1     a, b
2     2     b, c
3     3     b, c
4     4        a
Run Code Online (Sandbox Code Playgroud)

输出将始终以相同的顺序列出类型(例如,组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
Run Code Online (Sandbox Code Playgroud)

我还尝试将类型转换为一组单独的计数,但不确定是否确实有用:

> 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
Run Code Online (Sandbox Code Playgroud)

任何建议将不胜感激。

Flo*_*ian 6

我觉得你很亲密。您可以调用sortunique函数,以确保结果符合您的条件,如下所示:

df %>% group_by(group) %>% 
summarize(type = paste(sort(unique(type)),collapse=", "))
Run Code Online (Sandbox Code Playgroud)

返回:

# A tibble: 4 x 2
  group  type
  <int> <chr>
1     1  a, b
2     2  b, c
3     3  b, c
4     4     a
Run Code Online (Sandbox Code Playgroud)