如何通过R矩阵中的列删除重复的行

时间:2011-07-26 19:54:19

标签: r matrix duplicates

我试图在R矩阵中删除一列(例如第一列)的重复行。如何从矩阵中提取一列的唯一集?我用过

x_1 <- x[unique(x[,1]),]

虽然大小正确,但所有值均为NA。所以相反,我尝试了

x_1 <- x[-duplicated(x[,1]),]

但尺寸不正确。

2 个答案:

答案 0 :(得分:27)

我认为你对R中的子集化工作方式感到困惑。unique(x[,1])将返回第一列中的唯一值集。如果您使用这些值尝试子集,则R认为您指的是矩阵的。因此,您可能会获得NAs,因为这些值是指矩阵中不存在的行。

你的另一次尝试与duplicated返回布尔向量,而不是索引向量的事实相冲突。因此在它前面放一个减号将它转换为0和-1的向量,R再次将其解释为试图引用行。

尝试用'!'替换' - '在duplicated前面,这是布尔否定运算符。像这样:

m <- matrix(runif(100),10,10)
m[c(2,5,9),1] <- 1
m[!duplicated(m[,1]),]

答案 1 :(得分:13)

由于您需要唯一行的索引,请在尝试时使用duplicated。问题是使用-而不是!,请尝试:

x[!duplicated(x[,1]),]