在R中聚合后排序

时间:2013-06-06 19:43:07

标签: r sorting

我首先使用aggregate来获取数据框中一列的平均值,每列另一列:

meanDemVoteHouseState <- aggregate(congress$X2012.House.Dem.vote, 
                          by = list(state = congress$state),
                                   FUN = mean)

然后我想按顺序打印。首先,我查看了新数据框

str(meanDemVoteHouseState)

得到了

'data.frame':   50 obs. of  2 variables:
 $ state: chr  "AK" "AL" "AR" "AZ" ...
 $ x    : num  0.29 0.34 0.29 0.462 0.566 ...
显然,新变量现在称为“x”。

但是当我试图对此进行排序时:

meanDemVoteHouseState[order(x),]

我收到错误“对象'x'未找到”。

我尝试了很多其他的东西,但没有任何效果。

我错过了什么?

2 个答案:

答案 0 :(得分:3)

你想要

 meanDemVoteHouseState[order(meanDemVoteHouseState[,"x"]),]

如果你分两步进行,就会变得更加清晰

 myind <- order(meanDemVoteHouseState[,"x"])   # need 'x' fully qualified
 meanDemVoteHouseState[myind, ]

或者使用像with() ...

这样的内容

答案 1 :(得分:2)

可能更容易做到

meanDemVoteHouseState <- aggregate(X2012.House.Dem.vote ~ state,
                                   data = congress, FUN = mean)

哪个会保留变量名称(例如它)。你还需要排序,比如

ord <- with(meanDemVoteHouseState, order(X2012.House.Dem.vote))
meanDemVoteHouseState <- meanDemVoteHouseState[ord, ]

此时您可能想为变量和对象选择一些较短的名称。