在具有增加和减少列的两个条件下对r中的数据帧进行排序

时间:2018-10-16 12:19:49

标签: r sorting dataframe

我在df_Filtered中有类似的数据(其中过滤代表特定国家/地区的df):

Year Region    Percentage_of_national_sell
2012 Berlin    84%
2010 Hamburg   101%
2011 Stettin   98%
2012 Stettin   100%
2012 Hamburg   122%
2011 Berlin    111%
2010 Berlin    101%
2010 Stettin   87%
2011 Hamburg   58%

我想要做的是对df_Filtered进行排序,这样我首先将其按Region然后按Year进行排序(从Berlin开始,然后得到{{ 1}},20102011(按该特定顺序)。 2012Region都应该增加。

我尝试过:Year在Rstudio中以文本形式获得输出时有效,但是当我尝试重新映射它时,似乎并没有改变数据框的顺序:

df_Filtered[ order(df_Filtered$Region, (df_Filtered$Year)) , ]

是否可以更改数据帧本身中行的顺序?我想稍后将其导出到LaTex以制作漂亮的表格,这就是为什么顺序很重要的原因。

2 个答案:

答案 0 :(得分:2)

使用sqldf

您的样本数据:

df=read.table(text="Year Region    Percentage_of_national_sell
          2012 Berlin    84%
          2010 Hamburg   101%
          2011 Stettin   98%
          2012 Stettin   100%
          2012 Hamburg   122%
          2011 Berlin    111%
          2010 Berlin    101%
          2010 Stettin   87%
          2011 Hamburg   58%",header=T)

代码:

library(sqldf)
sqldf("select * from df order by Region, Year")

OR (Base R解决方案)

df[order(df$Region,df$Year),]

输出:

Year  Region Percentage_of_national_sell
1 2010  Berlin                        101%
2 2011  Berlin                        111%
3 2012  Berlin                         84%
4 2010 Hamburg                        101%
5 2011 Hamburg                         58%
6 2012 Hamburg                        122%
7 2010 Stettin                         87%
8 2011 Stettin                         98%
9 2012 Stettin                        100%

答案 1 :(得分:1)

dplyr软件包也可以很好地解决此问题:(数据不完整)

library(dplyr)

Region <- c("Ham", "Ste", "Ste", "Ham", "Ber", "Ber")
Year <- c(2012, 2010, 2011, 2012, 2012, 2011)
Percentage <- c(101, 98, 100, 122, 111, 101)
df <- data.frame(Region, Year, Percentage)

df %>% arrange(Region, Year)

输出:

  Year Region Percentage
1 2011    Ber        101
2 2012    Ber        111
3 2012    Ham        101
4 2012    Ham        122
5 2010    Ste         98
6 2011    Ste        100