我有一个数据框:
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
我显然做错了什么。 非常感谢你的帮助!
答案 0 :(得分:0)
我必须说这有点(或完全)疯了!我尝试了我的代码(底部的代码)并且它有效。我将它们合并在一起 - 它起作用了。我不明白为什么我之前收到错误。这是正确的代码(至少现在):
x %>% group_by(concat) %>% summarize(id = paste(id, collapse = ";"), super = unique(super),
category = unique(category), root = unique(root),
coldefs = paste(coldefs, collapse = ";"))