количество записей во фрейме данных в R
Вопрос
Я хочу получить подсчет для следующего фрейма данных:
> Santa
Believe Age Gender Presents Behaviour
1 FALSE 9 male 25 naughty
2 TRUE 5 male 20 nice
3 TRUE 4 female 30 nice
4 TRUE 4 male 34 naughty
от числа детей, которые верят.Какую команду я бы использовал, чтобы получить это?
(Фактический фрейм данных намного больше.Я только что дал вам первые четыре строки ...)
Спасибо!
Решение
Вы могли бы использовать table
:
R> x <- read.table(textConnection('
Believe Age Gender Presents Behaviour
1 FALSE 9 male 25 naughty
2 TRUE 5 male 20 nice
3 TRUE 4 female 30 nice
4 TRUE 4 male 34 naughty'
), header=TRUE)
R> table(x$Believe)
FALSE TRUE
1 3
Другие советы
Я думаю об этом как о двухэтапном процессе:
подмножество исходного фрейма данных в соответствии с предоставленным фильтром (Верить==FALSE);тогда
получите количество строк этого подмножества
Для первого шага необходимо подмножество функция - хороший способ сделать это (просто альтернатива обычному индексу или скобка обозначение).
Для второго шага я бы использовал тусклый или нроу
Одно из преимуществ использования подмножество:вам не нужно анализировать результат, который он возвращает, чтобы получить нужный вам результат - просто вызовите нроу прямо на нем.
так что в вашем случае:
v = nrow(subset(Santa, Believe==FALSE)) # 'subset' returns a data.frame
или завернутый в анонимная функция:
>> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))}
>> fnx(Believe, TRUE)
3
Помимо нроу, тусклый тоже выполнит свою работу.Эта функция возвращает размеры фрейма данных (строк, столбцов), поэтому вам просто нужно указать соответствующий индекс, чтобы получить доступ к количеству строк:
v = dim(subset(Santa, Believe==FALSE))[1]
Ответ на ОП, опубликованный перед этим, показывает использование таблицы непредвиденных обстоятельств.Мне не нравится такой подход к общей проблеме, изложенный в OP.Вот в чем причина.Конечно, общая проблема сколько строк в этом фрейме данных имеют значение x в столбце C? можно ответить, используя таблицу непредвиденных обстоятельств, а также используя схему "фильтрации" (как в моем ответе здесь).Если вы хотите, чтобы количество строк соответствовало всем значениям для данной факторной переменной (столбца), то таблица непредвиденных обстоятельств (посредством вызова таблица и передача в интересующую колонку (столбцы) является наиболее разумным решением;однако OP запрашивает количество a конкретный значение в факторной переменной не учитывается для всех значений.Помимо снижения производительности (может быть большим, может быть тривиальным, просто зависит от размера фрейма данных и контекста конвейера обработки, в котором находится эта функция).И, конечно, как только результат вызова table будет возвращен, вам все равно придется разобрать из этого результата получается только то количество, которое вы хотите.
Вот почему, на мой взгляд, это скорее проблема фильтрации, чем проблема с перекрестными вкладками.
sum(Santa$Believe)
Вы можете сделать summary(santa$Believe)
и вы получите подсчет за TRUE
и FALSE
DPLYR делает это действительно простым.
x<-santa%>%
count(Believe)
Если вы хотите подсчитать по группе;например, сколько мужчин и женщин верят, просто добавьте group_by
:
x<-santa%>%
group_by(Gender)%>%
count(Believe)
A однострочный решение с data.table
могло бы быть
library(data.table)
setDT(x)[,.N,by=Believe]
Believe N
1: FALSE 1
2: TRUE 3
используя sqldf
подходит сюда:
library(sqldf)
sqldf("SELECT Believe, Count(1) as N FROM Santa
GROUP BY Believe")