我有一个类似的问题,如概述in this question.问题是我有200多列,所以我不能像下面的代码那样全部列出它们:

  df %>%
  rowwise %>%
  mutate(Max = names(.)[which.max(c(x, y, z))]) %>%
  ungroup

我试过使用这个代码,但它给出了我所有列的最大值,我只需要列3到223的最大值.第1栏和第2栏是ID和年份,我需要它们.

df %>%
  rowwise() %>%
  mutate(Max = names(.)[which.max(c_across(3:223))]) %>%
  ungroup()

我的所有列都有不同的名称,所以我不能使用

mutate(Max = names(.)[which.max(c_across(starts_with("X")))])

在包含大约200列的数据集中,如果不列出所有200列的名称,如何才能找到每行具有最大值的列的名称?

推荐答案

您的第二种方法是正确的,您只需要将names(.)也子集:

set.seed(13)
library(dplyr)

# example data
df <- data.frame(id = 1:5, year = 2020:2024)
for (L in LETTERS[1:5]) df[[L]] <- sample(5)

df %>%
  rowwise() %>%
  mutate(Max = names(.[3:7])[which.max(c_across(3:7))]) %>%
  ungroup()

但更快、更简洁地使用max.col():

df %>%
  mutate(Max = names(.[3:7])[max.col(.[3:7], "first")])

结果:

  id year A B C D E Max
1  1 2020 3 4 3 5 5   D
2  2 2021 4 5 1 4 3   B
3  3 2022 1 1 2 1 1   C
4  4 2023 2 2 4 2 2   C
5  5 2024 5 3 5 3 4   A

R相关问答推荐

多个ggpredicate对象的平均值

跨列应用多个摘要函数:summerise_all:列表对象无法强制为double类型'

R:连接值,而不是变量?

随机森林回归:下拉列重要性

R Sapply函数产生的值似乎与for循环方法略有不同

如果可能,将数字列转换为整数,否则保留为数字

我正在努力用R计算数据集中的中值逐步距离

R中的哈密顿滤波

给定开始日期和月份(数字),如何根据R中的开始日期和月数创建日期列

在GG图中绘制射线的自动程序

从多层嵌套列表构建Tibble?

R如何将列名转换为更好的年和月格式

手动指定从相同数据创建的叠加图的 colored颜色

以不同于绘图中元素的方式对GG图图例进行排序

数值型数据与字符混合时如何进行绑定

根据排名的顶点属性调整曲线图布局(&Q)

是什么打破了此Quarto仪表板中的工具提示?

对数据帧中的列进行子集设置以通过迭代创建新的数据帧

如何使用ggsurvfit包更改风险表中的标签名称?

R:部分修改矩阵对角线的有效方法