2017-05-09 7 views
1

私はt(USArrests)のようなデータのセットを持っている:指定された行から値の平均を計算し、Rで順序付けする方法?

  Alabama Alaska Arizona Arkansas California Colorado Connecticut 
Murder  13.2 10.0  8.1  8.8  9.0  7.9   3.3 
Assault 236.0 263.0 294.0 190.0  276.0 204.0  110.0 
UrbanPop 58.0 48.0 80.0  50.0  91.0  78.0  77.0 
Rape  21.2 44.5 31.0  19.5  40.6  38.7  11.1 

私は唯一の状態ごとにMurderAssaultの平均値を計算し、その平均値に基づいてハイからローに状態を並べ替えるしたいと思います。

私はRに新しく、これを行う方法については迷っています。誰か助けてくれますか?ありがとう!

+0

「平均(殺人、暴行)」をしたいですか? –

答えて

2

あなたは(それぞれの状態のみごとに、1台のOBSを持っているので、これが事実であると仮定すると)一緒にMurderAssaultの平均をしたい場合は、あなたができる:

sort(colMeans(df[c("Murder","Assault"),]), decreasing = T) 

またはあなたのデータがある場合代わりに、実際に移調使用rowMeans

sort(rowMeans(USArrests[,c("Murder","Assault")]), decreasing = T) 
1

dplyrは、このための良い解決策です。データをt()にする必要はありません。

library(dplyr) 
library(tibble) 
USArrests %>% 
    rownames_to_column(var = "State") %>% 
    # perform operations by row 
    rowwise() %>% 
    # add a column with the mean 
    mutate(Mean = mean(c(Murder, Assault))) %>% 
    # should ungroup after using rowwise() 
    ungroup() %>% 
    # sort by Mean descending 
    arrange(desc(Mean)) 
0

data.tableパッケージを使用することを検討してください:

library(data.table) 
DT <- data.table(cbind(USArrests), State = row.names(USArrests)) 
mean_stats <- DT[, list(mean_murder = mean(Murder), 
         mean_assault = mean(Assault)), by = State] 
mean_stats[order(-mean_murder, -mean_assault)] 

をここで、私は、第1の平均殺人率によって、その後の平均暴行率により、降順で結果を注文しました。しかし、あなたが見ることができるように、それを変更するのは簡単です。ここではいくつかのサンプル出力は次のようになります。

> head(mean_stats[order(-mean_murder, -mean_assault)]) 
      State mean_murder mean_assault 
1:  Georgia  17.4   211 
2: Mississippi  16.1   259 
3:  Florida  15.4   335 
4:  Louisiana  15.4   249 
5: South Carolina  14.4   279 
6:  Alabama  13.2   236 

あなたがRに新しいしている場合は、自分に好意を行うと、data.tableパッケージを使用します。一般に、マージと集約には高速であり、コンパクトで分かりやすい構文を持っています。

関連する問題