聚合并将几个细胞折叠成一个细胞

时间:2017-08-08 21:47:16

标签: r dplyr aggregate tidyr summarize

我有一个数据框:

Apple

我通过连接3列创建一个新列:

x <- data.frame(id = 1:18,
                super = c(rep("A", 12), rep("B", 6)),
                category = c(rep("one", 6), rep("two", 6), rep("three", 6)),
                root = sort(rep(letters[1:6], 3)),
                coldefs = letters[1:18], stringsAsFactors = F)
x

现在,对于列'concat'的每个唯一值,列'super'的值是相同的,列'category'的值是相同的,列“root”的值是相同的。但是,对于列'concat'的每个唯一值,列'id'的值是不同的。列'coldefs'也是如此。

我想折叠(聚合)x,以便它只有列'concat'中有唯一值的行数(即6行)。在每一行中,我想要一个来自'super'列的值,一个来自列'category'的值,一个来自'root'列的值;然后是列'id'的3个值(如下连接:1; 2; 3)和列'coldefs'的3个值(连接方式如下:a; b; c)。

最好的方法是什么? 我正在尝试以下方法,但它不起作用:

myvars <- c("super", "category", "root")
library(tidyverse)
x <- x %>% unite(col = concat, myvars, sep = "_", remove = F)
x

我显然做错了什么。 非常感谢你的帮助!

1 个答案:

答案 0 :(得分:0)

我必须说这有点(或完全)疯了!我尝试了我的代码(底部的代码)并且它有效。我将它们合并在一起 - 它起作用了。我不明白为什么我之前收到错误。这是正确的代码(至少现在):

x %>% group_by(concat) %>% summarize(id = paste(id, collapse = ";"), super = unique(super), 
                                     category = unique(category), root = unique(root),
                                     coldefs = paste(coldefs, collapse = ";"))