我正在查看sample(..., replace=T)
是否会导致同一行n
次采样。我看到duplicated
函数通过返回每个索引的逻辑向量来检查元素是否重复,但我需要查看一个元素是否重复n
次(单个布尔值)。什么是最好的方法呢?
这只是一个例子。此矩阵的某些函数应返回TRUE
t(matrix(c(rep(c(rep(4,1),rep(5,1)),8)),nrow=2,ncol=8))
[,1] [,2]
[1,] 4 5
[2,] 4 5
[3,] 4 5
[4,] 4 5
[5,] 4 5
[6,] 4 5
[7,] 4 5
[8,] 4 5
答案 0 :(得分:5)
这是一个可以产生您正在寻找的真/假结果的解决方案:
m <- t(matrix(c(rep(c(rep(4,1),rep(5,1)),8)),nrow=2,ncol=8))
apply(m, 2, function(x) length(unique(x)) == 1)
[1] TRUE TRUE
m <- rbind(m, c(4, 6))
apply(m, 2, function(x) length(unique(x)) == 1)
[1] TRUE FALSE
如果你想要一个布尔值来说明所有列是否都有唯一值,你可以这样做:
all(apply(m, 2, function(x) length(unique(x)) == 1) == TRUE)
[1] FALSE
答案 1 :(得分:0)
认为我已经找到了解决方案。
B <- t(matrix(c(rep(c(rep(4,1),rep(5,1)),8)),nrow=2,ncol=8))
length(table(B)) == ncol(B)
[1] TRUE
B <- rbind(B,c(4,6)) # different sample
length(table(B)) == ncol(B)
[1] FALSE
答案 2 :(得分:0)
我们还可以复制第一行,与原始矩阵进行比较,得到colSums
并检查它是否等于'm'的nrow
colSums(m[1,][col(m)]==m)==nrow(m)
[1] TRUE TRUE
或另一种选择是检查方差
!apply(m, 2, var)
#[1] TRUE TRUE
答案 3 :(得分:0)
看起来更清晰(更容易分辨代码在做什么):
m <- t(matrix(c(rep(c(rep(4,1),rep(5,1)),8)),nrow=2,ncol=8))
apply(m, 2, function(x) all(x==x[1]))
[1] TRUE TRUE