相关疑难解决方法(0)

创建长度为n的二进制向量的0,1或2"1"的所有可能组合

我想创建一个长度为二进制向量的所有可能组合,以及行中n > 2最大数量为1s 的属性2.

例如:

如果n=4,答案是:

0 0 0 0 
0 0 0 1
0 0 1 0
0 0 1 1
0 1 0 0
0 1 0 1
0 1 1 0
1 0 0 0
1 0 0 1
1 0 1 0
1 1 0 0
Run Code Online (Sandbox Code Playgroud)

这有效,但随着n变大(n> 20),内存非常密集且速度很慢:

n <- 4
m <- expand.grid(rep(list(0:1),n))
m <- m[rowSums(m)<3,]
Run Code Online (Sandbox Code Playgroud)

我怎样才能更有效地做到这一点?

答案:
*基于Marat Talipov和akrun解决方案的组合

n=4
z=rep(0,n)
rbind(unname(z), t(combn(0:n,2, FUN=function(k) {z[k]=1;z})))
Run Code Online (Sandbox Code Playgroud)

r

10
推荐指数
1
解决办法
1486
查看次数

生成所有可能的n从R中的向量中选择2对,高效且快速

想象一下,我有一个向量x,我想创建一个矩阵,所有可能的n选择x的元素的2个组合.

更详细的,让我们说x是,

x = c(1,2,3,4)
Run Code Online (Sandbox Code Playgroud)

然后,所有可能的(4选2)= 6,

X = as.matrix(data.frame(col1 = c(1,1,1,2,2,3), col2 = c(2,3,4,3,4,4)))
Run Code Online (Sandbox Code Playgroud)

R中有功能吗?

r

9
推荐指数
1
解决办法
9593
查看次数

找到与目标相加的所有数字组合

我希望找到最快的方法来找到1000个'n'整数的可能组合来找到目标整数.

例如.说我想要数字'20'.我想找到最多1000个四个整数的组合,它们总和到这个数字.整数可以重复.我还有一个条件,即整数不能小于特定的数字,在这种情况下为4.

target<-20  #the number I wish to sum to
lowest<-4   #the smallest integer I allow
size<-4 #the number of integers I wish to use to sum
maxposs <- target - ((size-1) * lowest) #given the lowest, this is the max possible integer. In my example it is 8.
Run Code Online (Sandbox Code Playgroud)

这就是我开始解决这个问题的方法.利用combn找到的四个选择整数的所有组合,然后由那些和为我的目标过滤.

m <- combn(rep(lowest:maxposs,size), size)
m1<- m[,colSums(m)==target]
Run Code Online (Sandbox Code Playgroud)

这里,'m1'有245列.只有这么多解决方案.最后几列:

#     [,238] [,239] [,240] [,241] [,242] [,243] [,244] [,245]
#[1,]      4      4      4      4      4      4      5      5
#[2,]      5      5 …
Run Code Online (Sandbox Code Playgroud)

r

6
推荐指数
1
解决办法
2299
查看次数

有效地找到R中两个时间间隔之间的重叠

我曾经使用packagecombn()来查找两个日期/时间之间的重叠。但处理我正在处理的大型数据集太慢了我正在尝试从包中使用,但无法让它工作。任何帮助,将不胜感激。如果您知道我应该查看的任何其他包/功能,也请告诉我。lubridatecombn()comboGeneral()RcppAlgos

get_overlap <- function(.data, .id, .start, .end) {
  id <- .data[[.id]]
  int <- interval(.data[[.start]], .data[[.end]])
  names <- combn(id, 2, FUN = function(.) paste(., collapse = "-"))
  setNames(combn(int, 2, function(.) intersect(.[1], .[2])), names)
}

get_overlap(dat, "id", "start", "end")
# a-b a-c a-d a-e b-c b-d b-e c-d c-e d-e 
#  49   1   4  17  23  14  18  NA   2  NA 
Run Code Online (Sandbox Code Playgroud)

这是我使用失败的尝试comboGeneral()

comboGeneral(dat$int, 2, FUN = function(.) intersect(.[1], .[2]))

# Output: …
Run Code Online (Sandbox Code Playgroud)

r lubridate combn

6
推荐指数
1
解决办法
2137
查看次数

创建二进制向量的组合

我想创建一个由固定数字0和1组成的二进制向量的所有可能组合.例如:dim(v)= 5x1; N1 = 3; N0 = 2; 在这种情况下,我希望有类似的东西:

  1,1,1,0,0
  1,1,0,1,0
  1,1,0,0,1
  1,0,1,1,0
  1,0,1,0,1
  1,0,0,1,1
  0,1,1,1,0
  0,1,1,0,1
  0,1,0,1,1
  0,0,1,1,1
Run Code Online (Sandbox Code Playgroud)

我找到了一些帮助阅读这篇文章 创建所有可能的0,1或2"1"的长度为n的二进制向量 的组合,但我想只生成我需要的组合,避免任何浪费空间(我认为问题会随着n)而呈指数增长

binary combinations r

5
推荐指数
2
解决办法
2336
查看次数

矢量元素的所有组合之间的乘积

假设我有一个c(1, 2, 3, 4)没有重复值的向量.我需要一个向量c(1 * 2, 1 * 3, 1 * 4, 2 * 3, 2 * 4, 3 * 4),所以乘法是在这个向量值的所有可能组合中完成的.有没有办法做到这一点?提前致谢!

combinations r vector multiplication

4
推荐指数
1
解决办法
162
查看次数

用R中的条件按组计算均值

我有这个数据...

   Scientificname               Level Zone  levelmean
   <chr>                        <int> <chr>     <dbl>
 1 Acanthostracion polygonius       3 B         0.135
 2 Acanthostracion quadricornis     1 B         0.286
 3 Acanthostracion quadricornis     1 D         0.228
 4 Acanthostracion quadricornis     2 B         0.212
 5 Acanthostracion quadricornis     2 D         0.181
 6 Acanthostracion quadricornis     3 B         0.247
 7 Acanthostracion quadricornis     3 D         0.222
 8 Acanthostracion quadricornis     4 B         0.151
 9 Acanthostracion quadricornis     4 D         0.202
10 Acanthostracion spp.             2 B         0.225
11 Achirus lineatus                 1 B         0.204
12 Achirus lineatus                 1 D …
Run Code Online (Sandbox Code Playgroud)

grouping r data-manipulation dataframe

4
推荐指数
3
解决办法
100
查看次数

如何选择独特的点

我是新手R程序员.我有以下一系列要点.

df <- data.frame(x = c(1 , 2, 3, 4), y = c(6 , 3, 7, 5))
df <- df %>% mutate(k = 1) 
df <- df %>% full_join(df, by = 'k')
df <- subset(df, select = c('x.x', 'y.x', 'x.y', 'y.y'))
df
Run Code Online (Sandbox Code Playgroud)

有没有办法选择"独特"点?(点的顺序无关紧要)

编辑:

x.x y.x x.y y.y
1   6   2   3
2   3   3   7
.
.
.
Run Code Online (Sandbox Code Playgroud)

(我改变了2到7来澄清问题)

combinations r dplyr

3
推荐指数
1
解决办法
93
查看次数

创建每个可能的团队组合 - 组合优化

如果标题不能准确描述我正在做的事,请道歉.

我正在努力为幻想体育比赛建立每一个可能的假设团队.这意味着将所有可用的球员组合在一起,每个球员都有自己所在球队的特征,他们的位置和工资,这限制了一支球队的人数.我遇到的麻烦是找到一种内存有效的方法将它们全部组合起来.

我做了一个示例数据集:

 player_pool <- data.frame(id = seq(1,30), salary = seq(1,30), team = rep(LETTERS[seq(from=1, to=5)],6), position = rep(LETTERS[seq(from=1, to=5)],6))
Run Code Online (Sandbox Code Playgroud)

在这30名球员中,我想选择每支球队8人,其中至少有1名来自5个角色的球员,不超过3名来自同一球队的球员,总薪水不超过50.

例如,这将是一个有效的团队:

 id salary team position
 1   1      A   A
 2   2      B   B
 3   3      C   C
 4   4      D   D
 5   5      E   E
 6   6      A   A
 7   7      B   B
 8   8      C   C
Run Code Online (Sandbox Code Playgroud)

每支球队不超过两名球员,每名球员至少1名,总薪水为36名.

我一直在尝试使用包来逐步实现所有~6MM组合的公式iterpc,查找并计算每一步的薪水/团队编号.这让我可以在每一步都将所有内容都安装到内存中,但速度非常慢且效率低下 - 这相当于创建了每个可能的团队并连续应用规则.

任何替代方法都会很棒!

simulation combinations r combinatorics

2
推荐指数
1
解决办法
188
查看次数

R,data.table:查找列表的所有组合,排除与自身配对的每个元素

我想有效地找到列表的所有组合,不包括每个元素与其自身的组合.例如,使用A,B,C,D列表查找除AA,BB,CC,DD之外的所有组合.

我可以使用这段代码看起来效率低下:

x <- c("A","B","C","D")
dt <- CJ(x,x)
dt <- dt[!V1==V2]
Run Code Online (Sandbox Code Playgroud)

问题是第三行的运行时间大约是第二行的4倍.因此,对于像我的真实数据这样的大型列表,第2行和第3行可能需要很长时间.

我在Windows 7上使用data.table 1.9.6,R 3.2.2和R Studio.

非常感谢.

performance r data.table

2
推荐指数
1
解决办法
106
查看次数

R使用data.table获取组的组合(用于输入igraph)

我有一个像这样的data.table:

dt<-data.table(group=(c(rep("A", 4), rep("B", 3), rep("C", 2))),
       individual=c("Ava", "Bill", "Claire", "Daniel", "Evelyn", "Francis", "Grant", "Helen", "Ig"))
Run Code Online (Sandbox Code Playgroud)

我想改变这样的事情:

dt2<-data.table(group=(c(rep("A", 6), rep("B", 3), rep("C", 1))), edge1=c("Ava", "Ava", "Ava", "Bill", "Bill", "Claire", "Evelyn", "Evelyn", "Francis", "Helen"), edge2=c("Bill", "Claire", "Daniel", "Claire", "Daniel", "Daniel", "Francis", "Grant", "Grant", "Ig"))
Run Code Online (Sandbox Code Playgroud)

基本上,第二个表的每一行在第一个表中采用"按组分组的两个人".整个想法是将数据输入igraph进行网络分析.如果有更好的解决方案用于此目的,我们非常欢迎.

r igraph data.table

1
推荐指数
2
解决办法
88
查看次数