Подтвердить что ты не робот

Количество записей в кадре данных в 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

числа детей, которые верят. Какую команду я бы использовал, чтобы получить это?

(Фактический кадр данных намного больше. Я только что дал вам первые четыре строки...)

Спасибо!

4b9b3361

Ответ 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

Я думаю об этом как о двухэтапном процессе:

  • подмножество исходного кадра данных в соответствии с поставляемым фильтром (Believe == FALSE); затем

  • получить количество строк этого подмножества

Для первого шага функция подмножества - это хороший способ сделать это (просто альтернатива обычной нотации индекса или скобки).

Для второго шага я бы использовал тусклый или 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")