2016-03-01 5 views
0

данные: -Сортировка конкретных строк в dataframe в R

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

Что вы пытаетесь сделать здесь? – mtoto

+0

@mtoto Я пытаюсь сортировать все строки с именами «B» по дате – Jain

+0

@Jain Я думаю, что у вас есть опечатка в вашем посте, у вас есть 'dd [order (df [, c (« Name »)]),] ', но я думаю, что вы хотите' dd' быть 'df'. – steveb

ответ

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 
+0

... и третичный, и т. Д. –

+0

Я действительно думал о добавлении третичных, даже кватернеров или более высоких «-ристов», возможно, и, вероятно, должен был посоветовать прочитать страницу справки, где раздел «Использование» показал бы, что было возможно произвольное число векторов, как указано в первоначальном аргументе, являющемся тройными точками. –

+0

[больше ary's] (http://giphy.com/gifs/cowbell-snl-saturday-night-live-nUAuTPG3BqFC8) –