【发布时间】:2011-10-13 17:25:48
【问题描述】:
我试图在 R 矩阵中按一列(例如第一列)删除重复的行。如何从矩阵中提取一列的唯一集?我用过
x_1 <- x[unique(x[,1]),]
虽然大小正确,但所有值都是NA。所以相反,我尝试了
x_1 <- x[-duplicated(x[,1]),]
但尺寸不正确。
【问题讨论】:
标签: r matrix duplicates
我试图在 R 矩阵中按一列(例如第一列)删除重复的行。如何从矩阵中提取一列的唯一集?我用过
x_1 <- x[unique(x[,1]),]
虽然大小正确,但所有值都是NA。所以相反,我尝试了
x_1 <- x[-duplicated(x[,1]),]
但尺寸不正确。
【问题讨论】:
标签: r matrix duplicates
我认为您对 R 中子集的工作方式感到困惑。unique(x[,1]) 将在第一列中返回一组唯一值。如果您然后尝试使用这些值 subset,R 认为您指的是矩阵的 rows。因此,您可能会得到 NA,因为这些值引用了矩阵中不存在的行。
您的其他尝试与 duplicated 返回一个 boolean 向量而不是索引向量的事实相冲突。因此,在它前面加上一个减号会将其转换为 0 和 -1 的向量,R 再次将其解释为试图引用行。
尝试将“-”替换为“!” duplicated前面是布尔否定运算符。像这样的:
m <- matrix(runif(100),10,10)
m[c(2,5,9),1] <- 1
m[!duplicated(m[,1]),]
【讨论】:
由于您需要唯一行的索引,请尝试使用duplicated。问题是使用- 而不是!,所以试试:
x[!duplicated(x[,1]),]
【讨论】: