gpt4 book ai didi

当任何值大于、等于或小于阈值时从 R 中的矩阵中删除列

转载 作者:行者123 更新时间:2023-12-01 12:35:23 26 4
gpt4 key购买 nike

我正在玩虚构的骰子 - 其中两个 - 并希望生成所有可能的排列以加起来达到某个值,比如 '9'。所以我们有 {3,6}{4,5}{5,4}{6,3} 。但我想扩展它,我需要一些代码。

如果我想知道加起来等于 '6' 的排列,它可以这样做:

library(partitions)
compositions(6, m = 2)

[1,] 6 5 4 3 2 1 0
[2,] 0 1 2 3 4 5 6

这几乎可以满足我的需要——我们正在掷两个骰子,所以不会有任何可能的零...稍后我会回来讨论...

不幸的是,当您超过“6”时,您会开始得到数字大于“6”的组合,而这些组合不会出现在骰子的侧面。因此,我必须从 compositions() 返回的矩阵中删除任何值大于 '6' 的列。是的,还有任何带零的列。

你能帮忙吗,也许应用 allany,或者用括号子集,想出一个简短、优雅的方法来消除案例中不需要的列'9'(或其他示例 > 6):

compositions(9,2)

[1,] 9 8 7 6 5 4 3 2 1 0
[2,] 0 1 2 3 4 5 6 7 8 9

最佳答案

您可以像下面这样简单地使用应用函数:

ans <- compositions(9, m = 2)
ans[,apply(ans,2,function(x) all(x<=6))]

输出:

     [,1] [,2] [,3] [,4]
[1,] 6 5 4 3
[2,] 3 4 5 6

或者,您可以使用 dplyr ,它看起来更干净并且可能更直观:

library(dplyr)
expand.grid(d1=1:6, d2=1:6) %>% filter(d1+d2 == 9)

输出:

  d1 d2
1 6 3
2 5 4
3 4 5
4 3 6

或者使用上面的ans:

data.frame(as.matrix(t(ans))) %>% filter(X1 <= 6 & X2 <= 6)

输出:

  X1 X2
1 6 3
2 5 4
3 4 5
4 3 6

关于当任何值大于、等于或小于阈值时从 R 中的矩阵中删除列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30365550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com