在R中对数据帧的特定行进行排序

时间:2016-03-01 16:47:55

标签: r sorting dataframe

数据: -

df:-

    Name       Date
1    A     2015-01-01
2    B     2016-05-01
3    B     2015-01-05
4    A     2015-12-25
5    C     2015-01-01

代码: -

df <- df[order(df[,c("Name")]),]
> df
  Name       Date
1    A 2015-01-01
4    A 2015-12-25
2    B 2016-05-01
3    B 2015-01-05
5    C 2015-01-01
index= which(df$Name=="B")
start= index[1]
end=index[length(index)]
df[start:end,] <- df[order(df[start:end,("Date")]),]

> df
   Name       Date
1    A    2015-01-01
4    A    2015-12-25
2    A    2015-12-25
3    A    2015-01-01
5    C    2015-01-01

正如人们所看到的,这不是我期待的输出。我首先按名称对数据框进行排序,这很有效,然后我尝试对特定名称的各行进行排序。我找到特定名称的起始和结束索引,并尝试按日期对特定行进行排序。第二次排序导致此错误输出。请指教,也有更短的方法吗?提前谢谢。

预期产出: -

Name       Date
1    A 2015-01-01
4    A 2015-12-25
3    B 2015-01-05 
2    B 2016-05-01
5    C 2015-01-01

1 个答案:

答案 0 :(得分:2)

您似乎还不了解order可以同时采用主要和次要排序向量:

> df1 <- read.table(text="    Name       Date
+ 1    A     2015-01-01
+ 2    B     2016-05-01
+ 3    B     2015-01-05
+ 4    A     2015-12-25
+ 5    C     2015-01-01", head=TRUE)
> df1[ order(df1$Name, df1$Date) , ]
  Name       Date
1    A 2015-01-01
4    A 2015-12-25
3    B 2015-01-05
2    B 2016-05-01
5    C 2015-01-01