R Язык: Как мне распечатать / просмотреть сводную статистику для подмножества образцов? - PullRequest
5 голосов
/ 29 января 2011

Это несколько новых вопросов о статистическом программировании для R, на которые я не смог найти ответ в Интернете. Мой код данных помечен как "eitc" в приведенном ниже коде.

1) После загрузки во фрейм данных я хотел бы посмотреть сводную статистику,Я использовал функции:

eitc <- read.dta(file="/Users/Documents/eitc.dta")
summary(eitc)
sapply(eitc,mean,na.rm=TRUE) #for sample mean, min, max, etc.

Как мне найти сводную статистику по моему фрейму данных, когда выполнены определенные квалификации.Например, я хотел бы видеть сводную статистику по всем переменным, когда переменная "children" больше или равна 1. Эквивалентный код Stata:

summarize if children >= 1

2) Точно так же, как я могу найти конкретные параметры при соблюдении определенных требований?Например, я хочу найти среднее значение переменной «работа», когда обе переменные «post93» равны нулю, а переменная «anykids» равна 1. Эквивалентный код Stata:

mean work if post93==0 & anykids==1

3) В идеале, когда я запускаю сводную статистику выше, я хотел бы узнать, сколько наблюдений было включено в расчет / соответствует критериям.

4) Когда я читаю в моем фрейме данных, было бы также приятно видеть, сколько наблюдений включено в набор данных (и, возможно, сколько строк имеют пропущенные значения или "NA" в них).

5) Кроме того, я создаю фиктивные переменные, используя следующий код.Это правильный способ сделать это или есть более эффективный маршрут?

post93.dummy <- as.numeric(eitc$year>1993)
eitc=cbind(eitc,post93.dummy)

Ответы [ 4 ]

11 голосов
/ 29 января 2011

На многие ваши требования отвечает subset, например:

summary(subset(eitc, post93 == 0 & anykids == 1, select=work))
nrow(subset(eitc, post93 == 0 & anykids == 1, select=work)) # for number of obs.

В документации ?subset есть хорошие примеры.

Метод добавления фиктивных переменных cbindненужным.Просто сделайте:

eitc$post93.dummy <- as.numeric(eitc$year>1993) 
6 голосов
/ 29 января 2011

Я буду использовать mtcars данные, доступные в пакете datasets. Смотри ?mtcars.

Объявление 1. Вы можете просмотреть сводку mtcars, когда gear больше 3:

summary(mtcars[mtcars$gear > 3, ])
## or by using Tukey's five number summary
sapply(mtcars[mtcars$gear > 3, ], fivenum)

Объявление 2. Использование with:

with(mtcars, mean(hp[gear > 3 & mpg > 20]))

Объявление 3. Там же (но используйте length):

with(mtcars, length(hp[gear > 3 & mpg > 20]))
## or
sapply(mtcars[mtcars$gear > 3, ], length) ## which is trivial when there are no NA's
sapply(mtcars[mtcars$gear > 3, ], length, na.rm = TRUE) ## but this one's good when there are NA's
nrow(mtcars[mtcars$gear > 3, ])

Объявление 4. См. Предыдущее, но выяснить

сколько строк имеют пропущенные значения или "NA" в них

сделать что-то вроде этого:

apply(dtf, 1, function(x) length(is.na(x)))

Объявление 5. Это не фиктивная переменная, это некое подмножество исходных данных, сцепленных по столбцам. Что вы пытаетесь достичь в любом случае?

Пожалуйста, будьте лаконичны. Один вопрос на вопрос, пожалуйста!

2 голосов
/ 29 января 2011

Я бы рекомендовал вам взглянуть на пакет plyr для генерации резюме.Вот некоторый быстрый код (не выполняется);

#Generate a new factor based on the numeric value of children with 5 levels
eitc$childfac<-cut(eitc$children,5)

# Generate mean and sd of the variables foo and bar based on that factor
ddply(eitc, .(childfac), function(df) {
  return(data.frame(meanfoo=mean(df$foo), sdfoo=stdev(df$foo),
    meanbar=mean(df$bar), sdbar=stdev(df$bar))
  })

Вы также можете посмотреть пакеты hmisc и psych для более описательных процедур статистики.(Проверьте Quick-R для получения дополнительной информации)

0 голосов
/ 07 ноября 2016

Вот как вы можете быстро отобразить некоторую сводную статистику для подмножества ваших данных, используя data.table .

library(data.table)

dt <- data.table(mtcars)

var.names <- c("cyl", "disp", "hp")
dt[mpg > 20, 
   list(name=var.names, N=.N, mean=lapply(.SD, mean), sd=lapply(.SD, sd)), 
   .SDcols=var.names]

Вы можете использовать model.matrix для создания фиктивных переменных, смотрите здесь .

...