R:返回数据框中最大的两个值的列名
R: Returning the largest two values' column names in a data frame
关于return数据框最大值的列名有几个post。 (像这样post:For each row return the column name of the largest value)
但是,我的问题比这个复杂一点,我想知道如果我想return最大的两个(或三个,甚至十个)的列名,我应该使用什么代码R的数据?为了更清楚,您可以使用此示例代码:
DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
这将 return 类似于:
V1 V2 V3
1 2 7 9
2 8 3 6
3 1 5 4
我想获取最大的两列的列名,所以在这种情况下,它应该是这样的:
1 V3 V2
2 V1 V3
3 V2 V3
非常感谢您的提前帮助! :)
DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
DF
#> V1 V2 V3
#> 1 2 7 9
#> 2 8 3 6
#> 3 1 5 4
largest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[1]))]
secondlargest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[2]))]
cbind(largest, secondlargest)
#> largest secondlargest
#> [1,] "V3" "V2"
#> [2,] "V1" "V3"
#> [3,] "V2" "V3"
使用pmap
library(purrr)
pmap(DF, ~ {tmp <- c(...); head(names(tmp)[order(-tmp)], 2)})
-输出
[[1]]
[1] "V3" "V2"
[[2]]
[1] "V1" "V3"
[[3]]
[1] "V2" "V3"
或 dapply
来自 collapse
library(collapse)
slt(dapply(DF, MARGIN = 1, FUN = function(x) colnames(DF)[order(-x)]), 1:2)
V1 V2
1 V3 V2
2 V1 V3
3 V2 V3
关于return数据框最大值的列名有几个post。 (像这样post:For each row return the column name of the largest value)
但是,我的问题比这个复杂一点,我想知道如果我想return最大的两个(或三个,甚至十个)的列名,我应该使用什么代码R的数据?为了更清楚,您可以使用此示例代码:
DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
这将 return 类似于:
V1 V2 V3
1 2 7 9
2 8 3 6
3 1 5 4
我想获取最大的两列的列名,所以在这种情况下,它应该是这样的:
1 V3 V2
2 V1 V3
3 V2 V3
非常感谢您的提前帮助! :)
DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
DF
#> V1 V2 V3
#> 1 2 7 9
#> 2 8 3 6
#> 3 1 5 4
largest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[1]))]
secondlargest <- colnames(DF)[apply(DF, 1, FUN = function(x) which(x == sort(x, decreasing = TRUE)[2]))]
cbind(largest, secondlargest)
#> largest secondlargest
#> [1,] "V3" "V2"
#> [2,] "V1" "V3"
#> [3,] "V2" "V3"
使用pmap
library(purrr)
pmap(DF, ~ {tmp <- c(...); head(names(tmp)[order(-tmp)], 2)})
-输出
[[1]]
[1] "V3" "V2"
[[2]]
[1] "V1" "V3"
[[3]]
[1] "V2" "V3"
或 dapply
来自 collapse
library(collapse)
slt(dapply(DF, MARGIN = 1, FUN = function(x) colnames(DF)[order(-x)]), 1:2)
V1 V2
1 V3 V2
2 V1 V3
3 V2 V3