3

近所ごとに認識されている問題について調査を行った後、このデータフレームを取得しました。調査にはさまざまな選択肢と自由回答があったため、自由回答の質問の結果はしばしば無関係です (以下を参照)。

library(dplyr)
library(splitstackshape)
df = read.csv("http://pastebin.com/raw.php?i=tQKHWMvL")

# Splitting multiple answers into different rows.
df = cSplit(df, "Problems", ",", direction = "long")

df = df %>%
  group_by(Problems) %>%
  summarise(Total = n()) %>%
  mutate(freq = Total/sum(Total)*100) %>%
  arrange(rank = desc(rank(freq)))

このデータフレームの結果:

> df
Source: local data table [34 x 3]

                       Problems Total       freq
1  Hurtos o robos sin violencia   245 25.6008359
2                        Drogas   232 24.2424242
3             Peleas callejeras   162 16.9278997
4               Ningún problema   149 15.5694880
5                    Agresiones    66  6.8965517
6           Robos con violencia    62  6.4785789
7            Quema contenedores     6  0.6269592
8                        Ruidos     5  0.5224660
9                         NS/NC     4  0.4179728
10                    Desempleo     2  0.2089864
..                          ...   ...        ...
>

ご覧のとおり、9 行目以降の結果はほとんど無関係です (選択肢ごとに 1 つまたは 2 つの回答者のみ)。そのため、近隣との関係を失うことなく(「その他」などの) 単一の選択肢にグループ化することを望みます(つまり、なぜ今すぐ値の名前を変更できないのですか)。助言がありますか?

4

1 に答える 1

6

splitstackshapeはパッケージをインポートし(そのdata.table必要さえありませんlibrary)、クラスをデータ セットに割り当てます。そのため、特にサブセットでの割り当てに関しては何も勝るものがないため、そこから構文をdata.table進めるだけです。data.tabledata.table

言い換えれば、この長いdplyr配管の代わりに、簡単に行うことができます

df[, freq := .N / nrow(df) * 100 , by = Problems]
df[freq < 6, Problems := "OTHER"]

そして、あなたは行ってもいいです。

を使用して新しい要約テーブルを確認できます

df[, .(freq = .N/nrow(df) * 100), by = Problems][order(-freq)]
# 1: Hurtos o robos sin violencia 25.600836
# 2:                       Drogas 24.242424
# 3:            Peleas callejeras 16.927900
# 4:              Ningֳ÷n problema 15.569488
# 5:                   Agresiones  6.896552
# 6:          Robos con violencia  6.478579
# 7:                        OTHER  4.284222
于 2015-07-24T12:11:57.120 に答える