我有一个数据框:
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
我通过连接 3 列来创建一个新列:
myvars <- c("super", "category", "root")
library(tidyverse)
x <- x %>% unite(col = concat, myvars, sep = "_", remove = 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)。
最好的方法是什么?我正在尝试以下方法,但它不起作用:
x %>% group_by(concat) %>% summarize(id = paste(id, collapse = ";"),
super = unique(super), category = unique(category), root = unique(root),
coldefs = paste(coldefs, collapse = ";"))
我显然做错了什么。非常感谢你的帮助!