问题描述:

I'm looking to see if sample(..., replace=T) results in sampling the same row n times. I see the duplicated function checks if elements are repeated by returning a logical vector for each index, but I need to see if one element is repeated n times (single boolean value). What's the best way to go about this?

Here's just an example. Some function on this matrix should return 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

网友答案:

Here is one solution that works to produce the true/false result you are looking for:

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

If you want a single boolean value saying if all columns have unique values, you can do:

all(apply(m, 2, function(x) length(unique(x)) == 1) == TRUE)
[1] FALSE
网友答案:

Think I've got my solution.

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
网友答案:

We could also replicate the first row, compare with the original matrix, get the colSums and check whether it is equal to nrow of 'm'

colSums(m[1,][col(m)]==m)==nrow(m)
[1] TRUE TRUE

Or another option would be to check the variance

!apply(m, 2, var)
#[1] TRUE TRUE
相关阅读:
Top