Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R-从同一列中选择值的唯一组合_R_Unique_Combinations - Fatal编程技术网

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的组合。@CathG
tapply
保存对
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