比较三列并在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])])