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