R:将data.frame中的值折叠为类似于粘贴的向量(collapse =',')

时间:2018-02-06 18:54:07

标签: r group-by dplyr

考虑像这样的代码和输出

mtcars %>% group_by(gear) %>% summarize(cyls=paste(unique(cyl),collapse=','))

# A tibble: 3 x 2
   gear  cyls
  <dbl> <chr>
1     3 6,8,4
2     4   6,4
3     5 4,8,6

对于每个装备 - 我都会得到一个&#34;向量&#34;独特的气缸

用户希望在data.frame中保留操作的结果(例如,每个事件的年龄类别很重要),但是作为向量(用于输入到另一个函数)。

如何重写代码以输出char而不是cyls的向量?以下代码失败。

mtcars %>% group_by(gear) %>% summarize(cyls=unique(cyl))

&#34;输出&#34; shold是一个矢量类型的列,类似于

gear  cyls
3   c(6,8,4)
4   c(6,4)
5   c(4,8,6)

2 个答案:

答案 0 :(得分:1)

使用基数R我们可以:

(dat=aggregate(cyl~gear,mtcars,unique))
  gear     cyl
1    3 6, 8, 4
2    4    6, 4
3    5 4, 8, 6

哪里

dat$cyl
$`1`
[1] 6 8 4

$`2`
[1] 6 4

$`3`
[1] 4 8 6

使用dplyr您必须将最终的tibble强制转换为数据帧才能获得相同的结果

答案 1 :(得分:0)

cyls列为如下列表列:

my_df <- mtcars %>% group_by(gear) %>% summarize(cyls=list(unique(cyl)))

my_df$cyls[[1]] # boom dbl vectors for each row stored as a list
[1] 6 8 4