2015-09-11 5 views
0

Я искал и попробовал кучу способов понять это, но не нашел способ сделать это.R опорная таблица числовых данных

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

disp 
gear 0+ 100+ 200+ 300+ 400+ 
    3 20% 20% 20% 20% 20% 
    4 0% 25% 25% 25% 25% 
    5 0% 10% 20% 30% 40% 

Решение необходимо поставить disp в бункеры, назовите бункеры, а затем создайте опорный стол, основанный на взаимосвязи между ящиками disp и gear.

Прошу прощения, нет образца кода, но я не понимаю, как это сделать. Любая помощь будет принята с благодарностью.

+1

Правильность этих значений? Возможно, '100 * prop.table (таблица (transform (mtcars [c ('gear', 'disp')], disp = cut (disp, breaks = c (0, 100, 200, 300, 400, Inf), метки = c ('0+', '100+', '200+', '300+', '400 +')))), 1) ' – akrun

+0

Извините, нет, эти значения составлены на 100%. Я буду редактировать для ясности. –

+0

Насколько важно точное форматирование? По умолчанию 'cut' использует' (0,100] 'в качестве метки. Кроме того, по умолчанию' prop.table' не форматируется с символами процента. Ослабляя эти ограничения, код становится намного проще. – user295691

ответ

1

Мы можем использовать cut для производства бункеров и sub переименовать их

mtcars$dispR <- as.character(cut(mtcars$disp,breaks = seq(0,500,100),right=FALSE)) 
mtcars$dispR <- sub("\\[(\\d{1,3}).*","\\1+",mtcars$dispR) 

Затем добавить пропорции, мы можем использовать questionr::rprop

library(questionr) 
rprop(table(mtcars$gear,mtcars$dispR)) 


       0+ 100+ 200+ 300+ 400+ Total 
    3   0.0 6.7 33.3 33.3 26.7 100.0 
    4   33.3 66.7 0.0 0.0 0.0 100.0 
    5   20.0 40.0 0.0 40.0 0.0 100.0 
    Ensemble 15.6 34.4 15.6 21.9 12.5 100.0 

Это второй шаг может быть сделано в базе R с addmargins

t <- addmargins(table(mtcars$gear,mtcars$dispR)) 
round(t/t[,"Sum"] * 100,1) 

     0+ 100+ 200+ 300+ 400+ Sum 
    3  0.0 6.7 33.3 33.3 26.7 100.0 
    4 33.3 66.7 0.0 0.0 0.0 100.0 
    5 20.0 40.0 0.0 40.0 0.0 100.0 
    Sum 15.6 34.4 15.6 21.9 12.5 100.0 
+0

Знаете ли вы, почему '? Lprop' перенаправляет на' rprop' без объяснения или упоминания 'lprop'? –

+0

Решение Base R не работает, не уверен, что вы его протестировали. Мне это не нужно, но не хотите одобрять с помощью нерабочего решения для того, чтобы кто-то еще мог споткнуться. Для решения base R было бы проще обернуть prop.table вокруг вывода таблицы? Или это не дает того же решения? –

+0

вывод неверен. Проверьте интервалы разреза 'df $ disp [df $ gear == 3] 'для проверки против вашей первой строки. –

3
disp <- paste0(findInterval(mtcars$disp, c(seq(0,400, 100),Inf)), "00+") 
round(prop.table(table(mtcars$gear, disp), 1)*100, 1) 
# disp 
#  100+ 200+ 300+ 400+ 500+ 
# 3 0.0 6.7 33.3 33.3 26.7 
# 4 33.3 66.7 0.0 0.0 0.0 
# 5 20.0 40.0 0.0 40.0 0.0 
+0

. В чем заключается разница в ваших результатах против @scoa? –

+1

Он не учитывал поведение по умолчанию 'cut' –

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