r - 在 r 中提取具有条件的唯一行

标签 r

我有这样的数据:

x <- matrix(c(2,2,3,3,3,4,4,20,33,2,3,45,6,9,45,454,7,4,6,7,5), nrow = 7, ncol = 3)

在真实数据集中,我有一个包含很多列的巨大矩阵。 我想提取关于第一列(Id)和第三列最小值的唯一行。例如,对于这个矩阵,我希望

y <- matrix(c(2,3,4,20,3,9,45,4,5), nrow = 3, ncol = 3)

我尝试了很多东西,但我无法弄清楚。 任何帮助表示赞赏。

提前致谢, 泽雷

最佳答案

这是一个更复杂的版本,但比 Chase 的 ddply 解决方案要快一些——大约快 200 倍 :-)

 uniqueMin <- function(m, idCol = 1L, minCol = ncol(m)) {
    t(vapply(split(1:nrow(m), m[,idCol]), function(i, x, minCol) x[i, , drop=FALSE][which.min(x[i,minCol]),], m[1,], x=m, minCol=minCol))
 }

和下面的测试代码:

nRows <- 10000
nCols <- 100
ids <- nRows/5
m <- cbind(sample(ids, nRows, T), matrix(runif(nRows*nCols), nRows))
system.time( a<-uniqueMin(m, minCol=3L) ) # 0.07
system.time(ddply(as.data.frame(m), "V1", function(x) x[which.min(x$V3) ,])) # 15.72

关于r - 在 r 中提取具有条件的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6447232/

相关文章:

java - 如何从 Java 对象(REXP 对象)获取值?

r - 有没有办法转换 data.table 以便唯一的行元素成为列名称,然后显示元素计数?

r - ggplot : placing facet strips above axis title

r - R中的零除法

R ggplot2 geom_rect 堆叠起来

r - 对组学/生物统计学中的重复数据进行平均

r - 如何将 yield 转换为价格?

python - 使用 python 和 R 最小化 docker 镜像

r - 如何将ggplot2的geom_dotplot()与填充和组一起使用

r - 将 qdap 放大器应用于否定词