R 从多个列中确定行中的最大值,输出包括数据集中的所有列?

R 从多个列中确定行中的最大值,输出包括数据集中的所有列?,r,dplyr,max,rstudio,R,Dplyr,Max,Rstudio,我有一个相当大的数据集,我需要从几个列中确定每行的最大值。在下面的样本数据中,对于“II”,最高值是什么,以及最高值是否在“N”或“P”中。我知道之前已经发布了与此非常类似的问题,但是我需要输出以不删除数据集中的其他元数据列。这也意味着我需要指定应该包含在“max”查询中的列的范围。 提前感谢您的指导 data<-data_frame(Exp = c("I", "II", "III", "IV", "V", "VI", "VII", "VIII"), N

我有一个相当大的数据集,我需要从几个列中确定每行的最大值。在下面的样本数据中,对于“II”,最高值是什么,以及最高值是否在“N”或“P”中。我知道之前已经发布了与此非常类似的问题,但是我需要输出以不删除数据集中的其他元数据列。这也意味着我需要指定应该包含在“max”查询中的列的范围。 提前感谢您的指导

data<-data_frame(Exp = c("I", "II", "III", "IV", "V", "VI", "VII", "VIII"),
                  N = c(8.77, 1.67, 7.47, 7.58, 1.1, 8.9, 7.5, 7.7),
                  P = c(1.848, 3.029, 1.925, 2.725, 1.900, 3.100, 
                                    2.000, 9.800))
并接收错误: UseMethod中的错误(“mutate_”): 没有适用于“函数”类的对象的“mutate_”方法


这是我在这里提出的第一个问题,因此对于任何错误的格式等表示歉意,对此(以及我的问题)的任何建议将不胜感激

我分两步考虑这个问题

  • 查找列的最大值
  • 查找与最大值匹配的标签(假定值不相等)
  • 如果您只有两列
    N
    p
    ,那么在
    时使用
    case\u就很简单了

    data2=数据%>%
    变异(max_val=pmax(N,P))%>%#找到max
    当(max_val==N~“N”,#find label
    max_val==P~“P”))
    
    但是,如果列数或列名是动态的,那么这将变得更加困难。我有以下工作:

    cols=c(“N”,“P”)#要使用的列名列表
    数据2=数据%>%
    变异(max_val=pmax(!!!syms(cols))%>%#查找max
    mutate(source=NA)#初始化空白标签
    #迭代查找标签
    数据3=数据2
    适用于(c单位为cols)
    data3=变异(data3,source=ifelse(is.na(source)&max_val=!!sym(c),c,source))
    

    时,可能有一种方法可以将
    sym
    case_组合在一起,这样您就不必迭代标签。如果有人找到了,请发布此答案的更新。

    我分两步考虑

  • 查找列的最大值
  • 查找与最大值匹配的标签(假定值不相等)
  • 如果您只有两列
    N
    p
    ,那么在
    时使用
    case\u就很简单了

    data2=数据%>%
    变异(max_val=pmax(N,P))%>%#找到max
    当(max_val==N~“N”,#find label
    max_val==P~“P”))
    
    但是,如果列数或列名是动态的,那么这将变得更加困难。我有以下工作:

    cols=c(“N”,“P”)#要使用的列名列表
    数据2=数据%>%
    变异(max_val=pmax(!!!syms(cols))%>%#查找max
    mutate(source=NA)#初始化空白标签
    #迭代查找标签
    数据3=数据2
    适用于(c单位为cols)
    data3=变异(data3,source=ifelse(is.na(source)&max_val=!!sym(c),c,source))
    

    时,可能有一种方法可以将
    sym
    case_组合在一起,这样您就不必迭代标签。如果有人找到了,请发布此答案的更新。

    感谢您的回答,输出非常完美,正如您所说的,代码在列数较少的情况下工作得非常好。我正在试图找到第8列到第25列的最大值,因此一直试图使用:data[,8:25]来指定列,但没有任何效果,并且使用sym。您知道我如何将其应用到上述代码中吗?尝试第二种方法,将
    cols=c(“N”,“P”)
    替换为
    cols=
    所有列名的列表。这应该还能用,谢谢!花了一段时间,但把我所有的专栏都单独写出来是可行的。我还必须通过
    data[is.NA(data)]=0删除数据集中的所有NA值
    感谢您的回答,输出非常完美,正如您所说,代码使用的列数较少。我正在试图找到第8列到第25列的最大值,因此一直试图使用:data[,8:25]来指定列,但没有任何效果,并且使用sym。您知道我如何将其应用到上述代码中吗?尝试第二种方法,将
    cols=c(“N”,“P”)
    替换为
    cols=
    所有列名的列表。这应该还能用,谢谢!花了一段时间,但把我所有的专栏都单独写出来是可行的。我还必须通过
    data[is.NA(data)]=0来删除数据集中的所有NA值
    
    test %>% 
      mutate(Max = pmax(!!! rlang::syms(names(.)[c("N", "P"),]))) %>% 
      group_by(data, Exp) %>% 
      summarise(Max = max(Max))