【发布时间】:2015-05-21 13:29:34
【问题描述】:
目标:从矩阵或数据框中找到每一行的最低 n 值。对于此示例,我们希望找到每行的 3 个最低值。我们想用
rowname | colname_min | value_min | colname_min2 | value_min2 | colname_min3 | value_min3
出发点:我修改了这个问题的答案:R getting the minimum value for each row in a matrix, and returning the row and column name
这是我修改后的代码:
df<-data.frame(matrix(data=round(x=rnorm(100,10,1),digits=3),nrow=10),
row.names=c("A","B","C","D","E","F","G","H","I","J"))
colnames(df)<-c("AD","BD","CD","DD","ED","FD","GD","HD","ID","JD")
result <- t(sapply(seq(nrow(df)), function(i) {
j <- apply(df, 1, function(x){order(x, decreasing=F)[1:3]})
c(rownames(df)[i], colnames(df)[j[1,i]], as.numeric(df[i,j[1,i]]),
colnames(df)[j[2,i]], as.numeric(df[i,j[2,i]]),
colnames(df)[j[3,i]], as.numeric(df[i,j[3,i]]))
}))
这是有效的,并且对于小示例 data.frame 也可以正常工作。但是,我正在使用的 data.frame 有 200,000 行和 300 列。在我的机器上,代码现在运行了约 1 小时并且仍在工作。任何想法如何优化代码?我在想dplyr,但找不到解决方案。非常感谢您的帮助。
【问题讨论】:
标签: r matrix dataframe dplyr minimum