Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较三列并在R数据框中创建一个新列_R_Function_Dataframe_Warnings - Fatal编程技术网

比较三列并在R数据框中创建一个新列

比较三列并在R数据框中创建一个新列,r,function,dataframe,warnings,R,Function,Dataframe,Warnings,我有一个如下所示的数据集: ID A B C 1 150529 148914 60277 2 328122 330293 531977 3 74310 78129 34038 4 97520 104695 55268 我正在尝试评估每一行,确定最大的数字,并在这个数据集中创建一个新的列,其中包含答案,以便我以后可以继续基于此进行聚合 我创建了一个如下所示的函数: winner <-function(a, b, c){ i

我有一个如下所示的数据集:

ID  A       B       C
1   150529  148914  60277
2   328122  330293  531977
3   74310   78129   34038
4   97520   104695  55268
我正在尝试评估每一行,确定最大的数字,并在这个数据集中创建一个新的列,其中包含答案,以便我以后可以继续基于此进行聚合

我创建了一个如下所示的函数:

winner <-function(a, b, c){
  if (a>b & a>c) 
    {return("blue")} 
  else if(b>a & b>c) 
    {return("red")}
  else 
    {return("yellow")}  
} 
尝试:

此解决方案也比应用更快:

transform(res, newcol=do.call(pmax, res[-1]))

多亏了大家,@alexis_laz为我的问题提供了确切的解决方案

我已将代码更改为:

res <- transform(res, newcol=c("blue", "red", "yellow")[max.col(res[-1])])

res谢谢Khashaa,我需要解释一下。如果您的函数不是实际函数的简化版本,那么您可以使用
c(“蓝色”、“红色”、“黄色”)[max.col(res[-1])]
@alexis_-laz这是迄今为止最好的解决方案,我认为您应该对此做出回答。我本来打算在没有注意到你的评论的情况下提出同样的建议。@alexis_laz这个解决方案实际上做到了!谢谢,我会发表的。谢谢上校,这完全是个骗局,增加了一个额外的步骤,但让我摆脱了困境。
transform(res, newcol=apply(res[-1],1,max))
#  ID      A      B      C newcol
#1  1 150529 148914  60277 150529
#2  2 328122 330293 531977 531977
#3  3  74310  78129  34038  78129
#4  4  97520 104695  55268 104695
transform(res, newcol=do.call(pmax, res[-1]))
res <- transform(res, newcol=c("blue", "red", "yellow")[max.col(res[-1])])