2016-02-09 3 views
-1

Я хочу сортировать данные (data1, data2 и data3) в порядке убывания, после чего я хочу назначить соответствующую дату вместо значений в столбцах (data1, data2 и data3).Упорядочить несколько столбцов в порядке убывания и присвоить значение даты

date data1 data2 data3 
1970/1 5  8 7 
1971/1 7  4 2 
1972/1 3  3 4 
1973/1 2  0 54 
1974/1 0  50 12 
1975/1 8  8 6 
1976/1 10  2 4 
1977/1 20  3 1 

Я хотел бы получить выход как этот

data1 data2 data3 
1977/1 1974/1 1973/1 
1976/1 1970/1 1974/1 
1975/1 1975/1 1970/1 
1971/1 1971/1 1975/1 
1970/1 1972/1 1972/1 
1972/1 1977/1 1976/1 
1973/1 1976/1 1971/1 
1974/1 1973/1 1977/1 
+0

Что у вас до сих пор? –

+0

Какой из них вы хотите отсортировать? Вы не можете выбрать все три. Только один может быть отсортирован. –

+0

Я хочу отсортировать данные1 и присвоить значение даты после сортировки ... и я хочу выполнить такую ​​же операцию для других столбцов. –

ответ

3

О немного поздно ...

apply(df[,2:4], 2, function(d) df$date[order(d, decreasing = TRUE)]) 
+0

'lapply()' обычно более подходит для фреймов данных, особенно при работе над столбцами. Здесь вы также можете сделать 'as.data.frame (lapply (df [-1], function (x) df $ date [order (-x)])). В основном то же, что и у вас, только с 'lapply()'. –

0

Это окольный способ сделать это .. @ решение стивен это путь.

df <- data.frame(date,data1,data2,data3) 
rownames(df) <- df$date 

df1 <- df[order(df$data1, decreasing = TRUE), ] 
df$data1 <- rownames(df1) 

df2 <- df[order(df$data2, decreasing = TRUE), ] 
df$data2 <- rownames(df2) 

df3 <- df[order(df$data3, decreasing = TRUE), ] 
df$data3 <- rownames(df3) 
new.df <- subset(df, select = data1:data3) 
rownames(new.df) <- NULL 
new.df 

    data1 data2 data3 
1 1977/1 1974/1 1973/1 
2 1976/1 1970/1 1974/1 
3 1975/1 1975/1 1970/1 
4 1971/1 1971/1 1975/1 
5 1970/1 1972/1 1972/1 
6 1972/1 1977/1 1976/1 
7 1973/1 1976/1 1971/1 
8 1974/1 1973/1 1977/1