如果一个向量是由一个长度未知且元素唯一的向量通过重复未知次而产生的small_v <- c("as","d2","GI","Worm")big_v <- rep(small_v, 3)那么如何确定这个向量有多长,重复了多少次所以在这个例子中,原始长度是4,它重复了3次。实际上,在我的例子中,向量将相当小,并且只会重复几次。
small_v <- c("as","d2","GI","Worm")
big_v <- rep(small_v, 3)
laawzig21#
**1)**假设small_v中至少有一个唯一元素(问题中就是这种情况,因为它假设small_v中的所有元素都是唯一的):
small_v
min(table(big_v)) ## [1] 3
或使用管道
big_v |> table() |> min() ## [1] 3
下面是一个更困难的测试,但它仍然有效,因为small_v2[2]在small_v2中是唯一的,即使small_v2的其他元素不是唯一的。
small_v2[2]
small_v2
# test data small_v2 <- c(small_v, small_v[-2]) big_v2 <- rep(small_v2, 3) min(table(big_v2)) ## [1] 3
**2)**如果我们知道small_v的第一个元素是唯一的(这是问题中的情况,因为它假设small_v中的所有元素都是唯一的),那么这将起作用:
sum(big_v[1] == big_v) ## [1] 3
alen0pnh2#
**1)**如果元素都是重复的,并且没有其他值,则使用
length(big_v)/length(unique(big_v)) [1] 3
**2)**或使用
library(data.table) max(rowid(big_v)) [1] 3
hm2xizp93#
或者,我们可以使用rle和with来计算重复次数
rle
with
with(rle(sort(big_v)), max(lengths))
创建于2023年2月4日,使用reprex v2.0.2
[1] 3
3条答案
按热度按时间laawzig21#
**1)**假设
small_v
中至少有一个唯一元素(问题中就是这种情况,因为它假设small_v
中的所有元素都是唯一的):或使用管道
下面是一个更困难的测试,但它仍然有效,因为
small_v2[2]
在small_v2
中是唯一的,即使small_v2
的其他元素不是唯一的。**2)**如果我们知道
small_v
的第一个元素是唯一的(这是问题中的情况,因为它假设small_v
中的所有元素都是唯一的),那么这将起作用:alen0pnh2#
**1)**如果元素都是重复的,并且没有其他值,则使用
**2)**或使用
hm2xizp93#
或者,我们可以使用
rle
和with
来计算重复次数创建于2023年2月4日,使用reprex v2.0.2