假设我们有一个数据集,其中包含三列变量。我们想要生成所有变量之间的组合,然后将结果放在长格式中,并根据组标识符进行分组。
下面是使用dplyr和tidyr包的代码:
library(dplyr)
library(tidyr)
# 创建数据集
df <- data.frame(
group = c(1,1,2,2),
var1 = c("A", "B", "C", "D"),
var2 = c("X", "Y", "Z", "W"),
var3 = c(10, 20, 30, 40)
)
# 生成组合
combos <- df %>%
group_by(group) %>%
summarise(combos = list(combn(paste0(var1, var2, var3), 2, simplify=FALSE))) %>%
unnest(combos, keep_empty = TRUE)
# 分隔出各变量
combos <- combos %>%
separate(col=combos, into = c("combo1", "combo2"))
# 按组合重新排列变量
combo_vars <- combos %>%
gather(key=var, value=value, combo1:combo2) %>%
select(-var) %>%
spread(key=combos, value=value)
上述代码中,我们首先创建一个数据集df,其中包含三列变量以及分组标识符。然后,我们使用dplyr包中的group_by和summarise函数按组计算所有可能的组合,并将它们保存到一个列表中。接下来,我们使用unnest函数将列表转换回长格式,然后使用separate函数将组合分成两个列。最后,我们使用tidyr包中的gather和spread函数将数据重新排列为包含每个组合的变量的长格式。
下一篇:按组和单独列分类数据