我有一个包含三行的数据集:
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))
答案 0 :(得分:1)
尝试使用order()函数。在这个问题How to sort a dataframe by column(s)?
的答案中可以找到一个很好的例子new_df <- plyed[with(plyed, order(mean)),]
答案 1 :(得分:0)
您可以使用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)