当前位置: 首页 > 知识库问答 >
问题:

两个数字的序列,其中一个数字的出现次数减少

王扬
2023-03-14

我想从两个数字创建一个序列,这样其中一个数字的出现次数减少(从n_1减少到1),而另一个数字的出现次数固定在n_2

我一直在四处寻找并尝试使用seq和rep来做这件事,但我似乎不明白。

下面是c(0,1)n_1=5n_2=3的一个例子:

0,0,0,0,0,1,1,1,0,0,0,0,1,1,1,0,0,0,1,1,1,0,0,1,1,1,0,1,1,1

这里是c(0,1)n_1=2n_2=1

0,0,1,0,1

共有3个答案

亢正德
2023-03-14

下面是使用矩阵上三角形的另一种方法:

f_rep <- function(num1, n_1, num2, n_2){
    m <- matrix(rep(c(num1, num2), times=c(n_1+1, n_2)), n_1+n_2+1, n_1+n_2+1, byrow = T)
    t(m)[lower.tri(m,diag=FALSE)][1:sum((n_1:1)+n_2)]
}

f_rep(0, 5, 1, 3)
#[1] 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1

f_rep(2, 4, 3, 3)
#[1] 2 2 2 2 3 3 3 2 2 2 3 3 3 2 2 3 3 3 2 3 3 3
王轶
2023-03-14

使用类似概念的替代方法(尽管速度较慢):

unlist(mapply(rep,c(0,1),times=rbind(n_1:1,n_2)))
###[1] 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1
皇甫鸿远
2023-03-14

也许像这样的东西?

rep(rep(c(0, 1), n_1), times = rbind(n_1:1, n_2))
##  [1] 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1

在这里,它是一个函数(没有任何理智检查):

myfun <- function(vec, n1, n2) rep(rep(vec, n1), times = rbind(n1:1, n2))

myfun(c(0, 1), 2, 1)
## [1] 0 0 1 0 1

另一种选择是使用inverse.rle

y <- list(lengths = rbind(n_1:1, n_2),
          values = rep(c(0, 1), n_1))
inverse.rle(y)
##  [1] 0 0 0 0 0 1 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 1 1 1 0 1 1 1
 类似资料:
  • 问题内容: 对于SQL数据库中的用户日志记录表,我跟踪报告请求中的某些参数。该报告允许将多个ID传递给它,我将所有ID都存储在数据库列的单个列中。如果这是一组标准化的数据,则肯定会有一个附加的表设置,但这就是继承的内容。。。 现在,我被要求提供一个传递了2个以上ID的报告的运行次数的快速计数。我可以轻松获取请求的报告数量超过1个的记录的数量,因为它们都包含逗号。 接下来需要做的是计算逗号在列中出现

  • NowCoder 题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次,找出这两个数。 解题思路 两个不相等的元素在位级表示上必定会有一位存在不同,将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果。 diff &= -diff 得到出 diff 最右侧不为 0 的位,也就是不存在重复的两个元素在位级表示上最右侧不同的那一位,利用这一位就可以将两个元素区分开来。 // ja

  • 问题内容: 给定字符串: 如何获得每个字符的出现次数? 问题答案: 效率不高,但是只有一行…

  • NowCoder 题目描述 // html Input: nums = 1, 2, 3, 3, 3, 3, 4, 6 K = 3 Output: 4 解题思路 // java public int GetNumberOfK(int[] nums, int K) { int first = binarySearch(nums, K); int last = binarySearc

  • 对于每个查询,它都在n^2中运行。最大数组大小为8*10^3,最大查询数为10^5

  • 问题内容: 我是Java字符串的新手,问题是我想计算字符串中特定单词的出现次数。假设我的字符串是: 现在,我也不想拆分它,所以我想搜索一个“雄猫”这个词。它在我的字符串中出现了两次! 我正在尝试的是: 它给了我46个计数器的价值!那么解决方案是什么? 问题答案: 您可以使用以下代码: 演示版 它匹配。 表示在找到匹配项时执行循环内给出的任何操作。并且我将by 的值递增,因此很显然,这给出了一个字符