R:对于每一行,返回最大值的k列名称

时间:2016-06-19 12:00:59

标签: r

我认为这个例子会更直接:

实现以下目标的优雅方式是什么?

有:

#it doesn't work with 1 line
ggplot(df,aes(x,y))+geom_point()+
  facet_wrap(~f1.+f2,labeller=labeller(f1.=label_parsed,.multi_line=F))

DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))

我想获得如下数据框:

1:&#34; V2 V3&#34; #为7和9

2:&#34; V1 V3&#34; #为8和6

3:&#34; V2 V3&#34; #为5和4

1 个答案:

答案 0 :(得分:2)

我不知道它是否足够优雅,但这应该有效:

DF <- data.frame(V1=c(2,8,1),V2=c(7,3,5),V3=c(9,6,4))
k <- 2

mx <- t(apply(DF,1,function(x)names(DF)[sort(head(order(x,decreasing=TRUE),k))]))
> mx
     [,1] [,2]
[1,] "V2" "V3"
[2,] "V1" "V3"
[3,] "V2" "V3"

注意:mx是一个矩阵,但您可以使用as.data.frame(mx)轻松获取data.frame