如何选择R中矩阵列中不唯一的行

Ift*_*har 1 r matrix

我有一个大数据集,但我可以通过一个简单的例子来解释.例如,我有一个矩阵"x"

x<- matrix(c(3,3,3,4,3,3,5,5,5), nrow=3, byrow=T)

现在我需要第二行,其中"x"不是唯一条目.第一行和第三行在列的意义上是相等的.

提前问候并表示感谢,

Iftikhar Ahmad

wkm*_*or1 7

你也可以利用这样一个事实,即相等意味着标准偏差总是为0.不幸的是,我们必须将这些0转换为逻辑表达式(下面)或者使用as.logical.

x[apply(x, 1, sd) > 0, ]
Run Code Online (Sandbox Code Playgroud)

更新

做了一些@joran和我的解决方案的基准测试.我失去了:(

x <- matrix(sample(3:5,30000,T), ncol=3)    

system.time(x2 <- x[apply(x,1,sd) > 0, ])
user  system elapsed 
0.960   0.000   0.961

system.time(x2 <- x[apply(x,1,FUN=function(r){return(length(unique(r)))}) > 1,])
user  system elapsed 
0.470   0.000   0.465
Run Code Online (Sandbox Code Playgroud)

但...

如果我们做一个具有类似主题的完全矢量化版本,我们可以将两者都吹出水面

system.time(x2 <- x[rowSums(abs(x - rowMeans(x))) != 0, ])
user  system elapsed 
0.000   0.000   0.001
Run Code Online (Sandbox Code Playgroud)

  • +1你怎么敢用统计数据来解决R编码问题! (2认同)

jor*_*ran 6

这是你在寻找的东西:

x[apply(x,1,FUN=function(r){return(length(unique(r)))}) > 1,]
Run Code Online (Sandbox Code Playgroud)

这将选择具有多个唯一值的行.