R-从同一列中选择值的唯一组合
假设数据帧采用以下结构:R-从同一列中选择值的唯一组合,r,unique,combinations,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 或者,是否最好通过循环
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和C的所有唯一组合来确定它们的总数,然后对它们进行列绑定?如果是这样,我将如何循环通过A、B和C的独特组合,假设第一个数据帧的结构中存在数据?我的建议如下:
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))
然后expand.grid
构建笛卡尔乘积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
在
G之后,如何确定列组合1和组合2的值?感谢您的帮助!共有9种独特的组合,其中7种组合为列的总值。然后如何根据列中的值之和过滤返回的列?顺便说一句,您真的不需要组合,是吗?我已经编辑了我的答案。现在只剩下总数为7的组合。@CathGtapply
保存对split
的调用:tapply(df$ColB,df$ColA,unique)
。因此子集(x=expand.grid(tapply(df$ColB,df$ColA,unique)),a+B+C==7)是一个线性解决方案
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
G
# A B C
#6 4 2 1
#8 2 4 1
Combinations
# Comb_1 Comb_2
#A 4 2
#B 2 4
#C 1 1