2015-07-24 6 views
3

После проведения опроса по воспринимаемым проблемам в каждом районе я получаю this dataframe. Поскольку исследование были различные варианты, чтобы выбрать из + открытый один, результаты на открытый вопрос, часто не имеет значения (см):Сочетание нерелевантных/аналогичных наблюдений в одном (другие)

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 в основном неактуальна (только один или два респондента на каждый вариант), поэтому я бы хотел, чтобы они были сгруппированы в один параметр (например, «другие») , не теряя отношения к окрестности (это почему я не могу переименовать значения сейчас). Какие-либо предложения?

+0

Так вы решили, что ваш желаемый результат все же? –

+0

Мой желаемый результат должен состоять в том, чтобы отобразить барьер проблем по кварталам. Однако, будучи источником открытой анкеты, есть много нерелевантных ответов (всего лишь несколько голосов), которые я хотел бы объединить в «Другие» (но поддерживая его отношение к соседству) и другие проблемы, которые на самом деле являются синонимами. У меня есть обновленная информация и расширенный вопрос здесь: http://stackoverflow.com/questions/35813805/aggregating-and-mapping-observations-from-an-open-questionnaire – ccamara

ответ

6

splitstackshape импортирует data.table пакета (так что вам даже не нужно library его) и присваивает data.table класса для набора данных, так что я бы просто продолжить data.table синтаксиса оттуда, особенно потому, что ничто не сравнится data.table, когда его приходит к назначениям в подмножестве.

Другими словами, Intead этого длинного 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 
+0

Спасибо за ваш ответ, Дэвид. Хотя я не мог воспроизвести его, я боюсь, что вы предлагаете другой способ добиться того, что у меня уже есть, и это не то, чего я действительно хочу. Сгруппировав все нерелевантные ценности в «Другие», я не знаю, как связать ответы на кварталы снова. – ccamara

+0

Так что вместо того, чтобы переопределить столбец 'Problems' вместо нового, скажем,' Aggs' или что-то, используя тот же код, что и выше. Помимо этого я понятия не имею, чего вы хотите. Возможно, добавьте желаемый результат. –

+0

Кроме того, я ничего подобного не сделал. Ive назначил новые значения в соответствии с вашим состоянием и обновил данные по ссылке. Вы только что вычислили frequncies. –

Смежные вопросы