小编Rob*_*t K的帖子

从行中选择第 i 个最大值并分配给新列的最快方法

我正在寻找一种解决方案,将新列添加到现有数据框/数据表中,这是每个单独行中的第 i 个最高值。例如,如果我想要第 4 个最高值,则新列的第一行将包含 1.9。

data <- data.frame(a = c("a","a","b","b","c","a"),
                   peak1 = c(1.1,2.5,2.4,2.1,2.5,2.6),
                   peak2 = c(1.2,2.5,2.4,2.1,2.5,2.6),
                   peak3 = c(1.3,2.5,2.4,2.1,2.5,2.6),
                   peak4 = c(1.4,2.5,2.5,2.1,2.5,2.6),
                   peak5 = c(1.5,2.5,2.46,2.1,2.5,2.6),
                   peak6 = c(1.6,2.5,2.4,2.1,2.5,2.6),
                   peak7 = c(1.7,2.5,2.4,2.1,2.5,2.0),
                   peak8 = c(1.8,2.5,2.4,2.1,2.5,2.1),
                   peak9 = c(1.9,2.2,2.4,2.1,2.5,2.2),
                   peak10 = c(2,2.5,2.4,2.1,2.5,2.3),
                   peak11 = c(2.1,2.5,2.4,2.1,2.5,2.4),
                   peak12 = c(2.2,2.5,2.4,2.99,3,2.5))
Run Code Online (Sandbox Code Playgroud)

我已经尝试添加一个索引列,然后使用 lapply 函数选择值,但它在每个单元格中返回一个列表,并且在具有 ~3.000.000 条记录的真实数据集上运行速度非常慢。理想情况下,我正在寻找一种可以在几秒钟内解决此问题的解决方案,因为它运行良好。

data$index <- lapply(split(data[,c(-1)],seq(nrow(data))),FUN = order, decreasing = TRUE)
rank <- 4
data$result <- lapply(1:nrow(data), function(row) data[row, data$test[[row]][rank]+1])
Run Code Online (Sandbox Code Playgroud)

r

2
推荐指数
1
解决办法
198
查看次数

标签 统计

r ×1