2013-05-24 3 views
0

I'm совершенно новых для R, и это может быть есть простой ответ, но все-таки: У меня есть кадр данных на формеExtract и сортировки конкретных значений из кадра R данных

df <- data.frame(c("a", "b", "c", "d", "e"), 1:5, 7:11, stringsAsFactors=FALSE) 
names(df) <- c("en", "to", "tre") 

Мой набор данных больше, чем это, больше строк и столбцов. Но основная идея одна и та же: я хочу отсортировать n наивысших числовых значений, независимо от того, в каком столбце они появляются, и вернуть список со значениями в порядке убывания и их соответствующей строкой в ​​столбце «en».

Как это:

e 11 
d 10 
c 9 
b 8 
a 7 
e 5 

и так далее.

Как я могу это сделать?

ответ

3

Вы можете использовать пакет reshape2, чтобы расплавить данные и сортировать столбец значений, например:

require(reshape2) 
df <- data.frame(c("a", "b", "c", "d", "e"), 1:5, 7:11, stringsAsFactors=FALSE) 
names(df) <- c("en", "to", "tre") 

df2 <- melt(df, id = "en") 
## 'data.frame': 10 obs. of 3 variables: 
## $ en  : chr "a" "b" "c" "d" ... 
## $ variable: Factor w/ 2 levels "to","tre": 1 1 1 1 1 2 2 2 2 2 
## $ value : int 1 2 3 4 5 7 8 9 10 11 

df2[order(df2$value, decreasing = TRUE), c("en", "value")] 
## en value 
## 10 e 11 
## 9 d 10 
## 8 c  9 
## 7 b  8 
## 6 a  7 
## 5 e  5 
## 4 d  4 
## 3 c  3 
## 2 b  2 
## 1 a  1 

Но я уверен, что есть и другие способы сделать это !!

+0

Спасибо так много! Я попробую это. –

0

менее элегантный, но без дополнительных пакетов (он будет работать с любым количеством столбцов):

col1<-rep(df[,1],ncol(df)-1) 
col2<-c() 
for(i in 2:ncol(df)) { 
    col2<-c(col2,df[,i]) 
} 
newdf<-data.frame(en=col1,value=col2) 
newdf<-newdf[order(as.numeric(newdf[,2]),decreasing=TRUE),] 
Смежные вопросы