R 如何在数据帧或矩阵中按不同的行进行子集划分?
假设我有以下矩阵:R 如何在数据帧或矩阵中按不同的行进行子集划分?,r,matrix,filter,dataframe,subset,R,Matrix,Filter,Dataframe,Subset,假设我有以下矩阵: matrix(c(1,1,2,1,2,3,2,1,3,2,2,1),ncol=3) 结果: [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 3 2 [3,] 2 2 2 [4,] 1 1 1 如何根据每行是否有重复值筛选/子集此矩阵?例如,在本例中,我只希望保留第1行和第2行 任何想法都将不胜感激 indx这里是我的方法,它使用anyDuplicated函数,应该更快一些
matrix(c(1,1,2,1,2,3,2,1,3,2,2,1),ncol=3)
结果:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2
[3,] 2 2 2
[4,] 1 1 1
如何根据每行是否有重复值筛选/子集此矩阵?例如,在本例中,我只希望保留第1行和第2行
任何想法都将不胜感激
indx这里是我的方法,它使用anyDuplicated
函数,应该更快一些
indx <- apply(m, 1, function(x) !any(duplicated(x)))
m[indx, ]
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 1 3 2
mat[!apply(mat, 1, anyDuplicated), ]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2
尝试以下方法:(我怀疑这比任何应用方法都要快)
是的,1米行0.03秒,这里是4列矩阵。令人印象深刻。向量化函数,如行和
和==
每次都会执行beat`apply/循环。刚刚意识到这会在一行中有c(1,2,1)
的地方返回一个正值。这太棒了!我知道有一个更快的机会way@thelatemail:是的。这就是它的初衷。这就是我对请求的理解,但是更改测试可能会使它返回一组不同的行。第二种方法很有趣,谢谢分享!
mat[!apply(mat, 1, anyDuplicated), ]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2
mat[ rowSums(mat == mat[,1])!=ncol(mat) , ]
# ---with your object---
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 3 2