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