0

私は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

等々。

どうすればこれを達成できますか?

4

2 に答える 2

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

しかし、それを行う他の方法があると確信しています!!

于 2013-05-24T21:28:50.883 に答える
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),]
于 2013-05-24T23:57:13.527 に答える