Работа с трехмерными частотными таблицами в R

r

194 просмотра

2 ответа

Я могу генерировать трехмерные таблицы частот, но мне трудно работать с ними, чтобы получить необходимую информацию. Какой лучший способ подойти к этому?

Что у меня есть

Фрейм данных именованных бюллетени с колоннами member, vote_timeи voteвсе строки. Возможные значения в столбце голосования: Да, Нет, Воздержался, Присутствует и Отсутствует. Существует ровно одна строка для каждой комбинации memberи vote_timeзначений. Параметр голосования - немного случайный, так как большинство дат не имеют голосов, некоторые имеют один, а некоторые имеют несколько голосов.

Что я хочу

Кадр данных с колоннами member, vote_date, и absent_ratio. В absent_ratioстолбце будет показан процент бюллетеней, введенных данным участником в определенный день, которые отсутствовали, вместо Да или Нет и т. Д.

Что я пробовал

Добавить vote_dateстолбец к исходному фрейму данных было достаточно просто.

ballots$vote_date <- as.Date(ballots$vote_time)

Я пытался использовать как встроенную tableфункцию, так и countфункцию в plyrпакете. Они могут дать мне количество голосов отсутствующих для данной комбинации член / дата, но я не уверен, как превратить это в соотношение.

library(plyr)
daily_vote_count <- count(ballots, c('vote_date', 'name_en'))
daily_count_by_vote <- count(ballots, c('vote_date', 'vote', 'name_en'))
daily_absense_rate <- subset(daily_count_by_vote,
  name_en == daily_vote_count$name_en &
  vote_date == daily_vote_count$vote_date &
  vote == "Absent"
)$freq / daily_vote_count # DOESN'T WORK

В предупреждениях указывается, что я работаю с объектами разной длины, но я не уверен, как изменить свой подход. Спасибо за любые советы, которые вы можете дать мне.

Эквивалентная проблема

Так как было отмечено, что это трудно советовать без каких-либо данных, здесь используется эквивалентный вопрос mtcars. Какой процент автомобилей с топливной экономичностью более 20 миль на галлон для каждой комбинации цилиндров и передач?

С помощью этой команды я могу подсчитать количество автомобилей в каждой группе.

table(mtcars$mpg>20, mtcars$cyl, mtcars$gear)

То, что я не могу понять, как рассчитать правильный процент. Доля TRUE+ доли FALSEдля каждого cyl/ gearпара должна добавить к 100%. Но prop.table (), кажется, не возвращает то, что я хочу.

prop.table(table(mtcars$mpg>20, mtcars$cyl, mtcars$gear))    # No
prop.table(table(mtcars$mpg>20, mtcars$cyl, mtcars$gear),1)  # Nope
prop.table(table(mtcars$mpg>20, mtcars$cyl, mtcars$gear),2)  # Still wrong

Я также попытался изменить аргументы в table()функции, но пока не наткнулся на правильный ответ.

Автор: carpiediem Источник Размещён: 08.11.2019 11:21

Ответы (2)


1 плюс

Решение

Вы очень близки, но вам нужно сложить более 2 полей. Я переставляю ваш пример так, чтобы «голосование» было в конце, как в вашем первоначальном вопросе:

> tab <- xtabs(~cyl+gear+I(mpg>20), mtcars)
> prop.table(tab, 1:2)
, , I(mpg > 20) = FALSE

   gear
cyl   3   4   5
  4 0.0 0.0 0.0
  6 0.5 0.5 1.0
  8 1.0     1.0

, , I(mpg > 20) = TRUE

   gear
cyl   3   4   5
  4 1.0 1.0 1.0
  6 0.5 0.5 0.0
  8 0.0     0.0

> prop.table(tab, 1:2)[ , , 2] # Proportion TRUE for each combo
   gear
cyl   3   4 5
  4 1.0 1.0 1
  6 0.5 0.5 0
  8 0.0 NaN 0

Все 4-цилиндровые автомобили получают более 20 миль на галлон, и ни один 8-цилиндровый автомобиль не делает. Чтобы получить фрейм данных:

> as.data.frame.table(prop.table(tab, 1:2)[ , , 2])
  cyl gear Freq
1   4    3  1.0
2   6    3  0.5
3   8    3  0.0
4   4    4  1.0
5   6    4  0.5
6   8    4  NaN
7   4    5  1.0
8   6    5  0.0
9   8    5  0.0
Автор: dcarlson Размещён: 20.08.2016 05:27

2 плюса

Этот:

with(mtcars, tapply(mpg>19, list(cyl=cyl,gear=gear), length))

дает вам общее количество автомобилей для каждой комбинации цил / передач. Этот:

with(mtcars, tapply(mpg>19, list(cyl=cyl,gear=gear), sum))

дает вам количество автомобилей, которые имеют mpg>19для каждой комбинации цил / передач. Следовательно, это:

with(mtcars, tapply(mpg>19, list(cyl=cyl,gear=gear), function(v) 100*sum(v)/length(v)))

дает вам клеточный процент автомобилей с топливной экономичностью, превышающей или равной 20 милям за галлон.

Автор: renato vitolo Размещён: 20.08.2016 05:24
Вопросы из категории :
32x32