我有以下数据帧
Name <- c("Jhon", "Lee", "Suzan", "Abhinav",
"Brain", "Ron","Cat","Mike","Bob","Sue","Carl")
Vote <- rep(letters[1:21],each=10, len=230)
z <- as.data.frame (cbind(Name, Vote))
我想创建一个数据帧列表,它代表6个名字的所有可能组合及其各自的投票(在我拥有的11个名字中(,还包括附加的5个其他名字。以下给出了6个名称的所有可能组合,即462
comb<-combn(unique(as.character(z$Name)), 6)
comb有462列,所以它是正确的输出。
以下代码创建组合中所有数据帧的列表。
combdf <- apply(comb, 2, function(vec) z[ z$Name %in% vec, ] )
下面的代码应该创建我想要的的输出
output <- z %>%
pull(Name) %>%
unique %>%
combn(., 3, FUN = function(vec)
z %>%
filter(Name %in% vec) %>%
bind_rows(z %>%
filter(!Name %in% vec) %>%
rename(Name2 = Name, Vote2 = Vote)) %>%
mutate(across(c(Name2, Vote2),
~ .[order(is.na(.))])), simplify = FALSE)
我的问题是output
有165个数据帧,我预计有462个。此外,如果我没有错的话,combdf
中的每个数据帧应该有230行(我的原始数据帧-z也是如此(。然而,事实并非如此。例如,数字1有226,数字4有229,数字18有228(随机检查(。
combn
中的m
决定组合的数量以及
>combn(1:6, 2)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15]
[1,] 1 1 1 1 1 2 2 2 2 3 3 3 4 4 5
[2,] 2 3 4 5 6 3 4 5 6 4 5 6 5 6 6
> combn(1:6, 3)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16] [,17] [,18] [,19] [,20]
[1,] 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 3 3 3 4
[2,] 2 2 2 2 3 3 3 4 4 5 3 3 3 4 4 5 4 4 5 5
[3,] 3 4 5 6 4 5 6 5 6 6 4 5 6 5 6 6 5 6 6 6
注意列差异的数量。类似地,在OP的帖子中,"combdf"是用m = 6
创建的,而在tidyverse代码中,使用的m
是3。因此,它与462
和165
不同