R - 从同一列中选择值的唯一组合

时间:2016-01-05 12:51:44

标签: r unique combinations

假设以下结构中的数据框:

ColA  ColB
A     1
A     2
A     4
B     3
B     2
B     4
C     1
C     1
C     1

是否可以选择总和为7的A,B和C的所有组合(使用A,B和C中的每一个),例如如下:

ColA  Combination1  Combination2
A     2             4
B     4             2
C     1             1

或者,循环浏览A,B和B的所有独特组合会更好吗? C确定它们的总数然后列绑定它们?如果是这样,我将如何遍历A,B和B的独特组合。 C假设数据在第一个数据帧的结构中?

1 个答案:

答案 0 :(得分:1)

这是我的建议:

df <- read.table( header =TRUE,
                  text = "ColA  ColB
                          A     1
                          A     2
                          A     4
                          B     3
                          B     2
                          B     4
                          C     1
                          C     1
                          C     1")

X <- tapply(df$ColB, df$ColA, unique)
G <- expand.grid(X)
G <- G[rowSums(G)==7, ]

Combinations <- data.frame(t(G))
colnames(Combinations) <- paste0("Comb_", 1:ncol(Combinations))

列表X包含ABC的唯一值:

X
#$A
#[1] 1 2 4

#$B
#[1] 3 2 4

#$C
#[1] 1

然后expand.grid构建笛卡尔积[{1}},即这些唯一值的组合:

G

G # A B C #1 1 3 1 #2 2 3 1 #3 4 3 1 #4 1 2 1 #5 2 2 1 #6 4 2 1 #7 1 4 1 #8 2 4 1 #9 4 4 1 之后,只剩下总和为7的组合:

G <- G[rowSums(G)==7,]

最后,矩阵G # A B C #6 4 2 1 #8 2 4 1 中的数据会被放入data.frame G中:

Combinations