Вопрос

Я хочу получить подсчет для следующего фрейма данных:

> 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 

Другие советы

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

  1. подмножество исходного фрейма данных в соответствии с предоставленным фильтром (Верить==FALSE);тогда

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

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

Для второго шага я бы использовал тусклый или нроу

Одно из преимуществ использования подмножество:вам не нужно анализировать результат, который он возвращает, чтобы получить нужный вам результат - просто вызовите нроу прямо на нем.

так что в вашем случае:

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")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top