在R中排序分类变量

  • 本文关键字:类变量 排序 r
  • 更新时间 :
  • 英文 :


我有一个带有三个行的数据集:

Date         State     Count
1994-01-05   Alabama   408
1994-01-06   Alabama   784
1994-02-08   Alabama   552
1994-01-05   Alaska    1067
1994-01-06   Alaska    36
1994-02-08   Alaska    8571
1994-01-05   Arizona   385
1994-01-06   Arizona   1845
1994-02-08   Arizona   49

在五十个状态中每个州的同一日期都有相同日期的计数。日期和状态被排序如上所示。

我想将日期变成四行的格式*:

Date         State     Count   mean
1994-01-05   Alabama   408     581.333
1994-01-06   Alabama   784     581.333
1994-02-08   Alabama   552     581.333
1994-01-05   Arizona   385     759.666
1994-01-06   Arizona   1845    759.666
1994-02-08   Arizona   49      759.666
1994-01-05   Alaska    1067    3224.666
1994-01-06   Alaska    36      3224.666
1994-02-08   Alaska    8571    3224.666

首先,计算每个状态的计数的平均值,并将其输入到第四列中。然后,将各州从最小的平均值重新排序。

我能够使用命令完成计算每个状态的平均值的第一步:

plyed = ddply(dataset,.(State), transform, mean= mean(Count))

但是,此命令仅计算每个状态的平均值,但并未通过平均值重新排序状态,给出以下:

Date         State     Count   mean
1994-01-05   Alabama   408     581.333
1994-01-06   Alabama   784     581.333
1994-02-08   Alabama   552     581.333
1994-01-05   Alaska    1067    3224.666
1994-01-06   Alaska    36      3224.666
1994-02-08   Alaska    8571    3224.666
1994-01-05   Arizona   385     759.666
1994-01-06   Arizona   1845    759.666
1994-02-08   Arizona   49      759.666

我不确定如何通过均值重新排序状态以获取所需的输出*。我尝试了重新排序命令,但是正在获得所有不同和不需要的输出格式。这是我尝试过的命令的一个示例:

reorder(plyed$State, plyed$mean, order=is.ordered(plyed$State)) 

尝试使用order()函数。可以在此问题的答案中找到一个很好的示例,如何按列对数据框进行排序?

new_df <- plyed[with(plyed, order(mean)),]

您可以使用plyr::arrange

arrange(ddply(df, .(State), mutate, mean = mean(Count)), mean)
##         Date   State Count    mean
## 1 1994-01-05 Alabama   408  581.33
## 2 1994-01-06 Alabama   784  581.33
## 3 1994-02-08 Alabama   552  581.33
## 4 1994-01-05 Arizona   385  759.67
## 5 1994-01-06 Arizona  1845  759.67
## 6 1994-02-08 Arizona    49  759.67
## 7 1994-01-05  Alaska  1067 3224.67
## 8 1994-01-06  Alaska    36 3224.67
## 9 1994-02-08  Alaska  8571 3224.67

只是为了好玩,我会添加dplyr解决方案

detach(package:plyr)
library(dplyr)
df %.%
    group_by(State) %.%
    mutate(mean = mean(Count)) %.%
    arrange(mean)

最新更新