r - 在 r 中的数据框中查找每行的第一、第二和第三个最大值及其对应的列名
问题描述
我正在尝试为每行查找第一个最大值、第二个最大值和第三个最大值以及相应的列名称,但无法在 r. 请帮忙。
以下是数据框的外观:
X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12
10003 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10006 0.0 0.0 0.0 0.0 0.0 0.0 16.7 0.0 0.0 0.0 0.0 0.0
10007 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10008 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10010 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
10014 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0
解决方案
这是您在评论中发布的示例数据:
data <-read.table(text=" x1 x2 x3 x4 x5 x6 x7 x8 x9
1003 0 45.7 0 22.9 0 13.7 0 0 23.1
1004 22.2 0 13.2 0 5.4 0 9.7 0 0
1005 0 0 0 12 2.1 0 0 3.2 0
1006 1.2 0 1.2 0 43.9 43.9 0 0 57.6",
header=T)
您可以使用dplyr
andtidyverse
来实现这一点。
以下代码将为您提供所有行中最多三列:
library(dplyr)
library(tidyverse)
data %>%
rownames_to_column() %>%
gather(column, value, -rowname) %>%
group_by(rowname) %>%
arrange(desc(value)) %>%
head(3)
这将为您提供以下结果:
# A tibble: 3 x 3
# Groups: rowname [3]
# rowname column value
# <chr> <chr> <dbl>
# 1 1006 x9 57.6
# 2 1003 x2 45.7
# 3 1006 x5 43.9
如果要获取每行的最大三个值,可以按如下方式进行:
result <- data %>%
rownames_to_column() %>%
gather(column, value, -rowname) %>%
group_by(rowname) %>%
mutate(max = rank(-value)) %>%
filter(max <= 3) %>%
arrange(rowname, max)
这将为您提供以下结果:
# A tibble: 12 x 4
# Groups: rowname [4]
# rowname column value max
# <chr> <chr> <dbl> <dbl>
# 1 1003 x2 45.7 1
# 2 1003 x9 23.1 2
# 3 1003 x4 22.9 3
# 4 1004 x1 22.2 1
# 5 1004 x3 13.2 2
# 6 1004 x7 9.7 3
# 7 1005 x4 12 1
# 8 1005 x8 3.2 2
# 9 1005 x5 2.1 3
# 10 1006 x9 57.6 1
# 11 1006 x5 43.9 2.5
# 12 1006 x6 43.9 2.5
要汇总每一行的结果,请使用以下代码:
result %>%
mutate(result = paste0(column, "=", value, collapse = ", ")) %>%
select(result) %>%
distinct()
这将为您提供以下结果:
# A tibble: 4 x 2
# Groups: rowname [4]
# rowname result
# <chr> <chr>
# 1 1003 x2=45.7, x9=23.1, x4=22.9
# 2 1004 x1=22.2, x3=13.2, x7=9.7
# 3 1005 x4=12, x8=3.2, x5=2.1
# 4 1006 x9=57.6, x5=43.9, x6=43.9
希望能帮助到你。
推荐阅读
- unity3d - 在 Unity 中将 sphereMovie 纹理切割成多半,并在每一半上播放不同的视频
- oracle - 找出他们部门内平均工资超过 8000 的员工
- swift3 - Swift3 是否提供 reCAPTCHA
- c# - 是否可以修改“索引超出数组范围”的错误消息?
- hive - CDH Hive raise:无法实例化 org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStoreClient
- python - 在 django 中调用 ajax 后,数据库中的表行顺序未更新
- java - 为什么需要导入 java.util.* 才能使用 Arrays.toString()
- mysql - 如何在python中将数组插入数据库?
- r - 使用数据框的值搜索行
- javascript - 当“onChange”已经为不同的功能保留时,如何避免在反应输入字段中使用空格?