我在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}},2010
,2011
(按该特定顺序)。 2012
和Region
都应该增加。
我尝试过:Year
在Rstudio中以文本形式获得输出时有效,但是当我尝试重新映射它时,似乎并没有改变数据框的顺序:
df_Filtered[ order(df_Filtered$Region, (df_Filtered$Year)) , ]
是否可以更改数据帧本身中行的顺序?我想稍后将其导出到LaTex以制作漂亮的表格,这就是为什么顺序很重要的原因。
答案 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