Количество строк в кадре данных в R на основе группы
У меня есть кадр данных в R
следующим образом:
ID MONTH-YEAR VALUE
110 JAN. 2012 1000
111 JAN. 2012 2000
. .
. .
121 FEB. 2012 3000
131 FEB. 2012 4000
. .
. .
Итак, за каждый месяц каждого года есть строки n
, и они могут быть в любом порядке (значит, все они не находятся в непрерывности и находятся на разрывах). Я хочу рассчитать, сколько строк есть для каждого MONTH-YEAR
то есть сколько строк для JAN. 2012, сколько для FEB. 2012 и так далее. Что-то вроде этого:
MONTH-YEAR NUMBER OF ROWS
JAN. 2012 10
FEB. 2012 13
MAR. 2012 6
APR. 2012 9
Я попытался сделать это:
n_row <- nrow(dat1_frame %.% group_by(MONTH-YEAR))
но он не дает желаемого результата. Как я могу это сделать?
Ответы
Ответ 1
Вот пример, показывающий, как table(.)
(или, более точно, соответствующий вашему желаемому результату, data.frame(table(.))
делает то, что звучит так, как вы просите.
Обратите внимание также, как распространять воспроизводимые образцы данных таким образом, чтобы другие могли копировать и вставлять их в свою сессию.
Здесь (воспроизводимые) данные образца:
mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L),
MONTH.YEAR = c("JAN. 2012", "JAN. 2012",
"FEB. 2012", "FEB. 2012",
"MAR. 2012"),
VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)),
.Names = c("ID", "MONTH.YEAR", "VALUE"),
class = "data.frame", row.names = c(NA, -5L))
mydf
# ID MONTH.YEAR VALUE
# 1 110 JAN. 2012 1000
# 2 111 JAN. 2012 2000
# 3 121 FEB. 2012 3000
# 4 131 FEB. 2012 4000
# 5 141 MAR. 2012 5000
Здесь вычисляется количество строк на группу в двух форматах вывода:
table(mydf$MONTH.YEAR)
#
# FEB. 2012 JAN. 2012 MAR. 2012
# 2 2 1
data.frame(table(mydf$MONTH.YEAR))
# Var1 Freq
# 1 FEB. 2012 2
# 2 JAN. 2012 2
# 3 MAR. 2012 1
Ответ 2
Функция count()
в plyr
делает то, что вы хотите:
library(plyr)
count(mydf, "MONTH-YEAR")
Ответ 3
Используя примерный набор данных, который Ананда фиктивный, вот пример использования aggregate()
, который является частью ядра R. aggregate()
, просто нуждается в том, чтобы считать функцию различных значений MONTH-YEAR
. В этом случае я использовал VALUE
как вещь для подсчета:
aggregate(cbind(count = VALUE) ~ MONTH.YEAR,
data = mydf,
FUN = function(x){NROW(x)})
который дает вам..
MONTH.YEAR count
1 FEB. 2012 2
2 JAN. 2012 2
3 MAR. 2012 1
Ответ 4
library(plyr)
ddply(data, .(MONTH-YEAR), nrow)
Это даст вам ответ, если "MONTH-YEAR" является переменной.
Во-первых, попробуйте уникальный (данные $MONTH-YEAR) и посмотрите, не вернет ли он уникальные значения (без дубликатов).
Затем выше простого split-apply-comb вернет то, что вы ищете.
Ответ 5
Попробуйте использовать функцию count в dplyr:
library(dplyr)
dat1_frame %>%
count(MONTH.YEAR)
Я не уверен, как вы получили MONTH-YEAR как имя переменной. Моя версия R не позволяет использовать такое имя переменной, поэтому я заменил ее на MONTH.YEAR.
В качестве побочной заметки ошибка в коде заключалась в том, что dat1_frame %.% group_by(MONTH-YEAR)
без функции summarise
возвращает исходный кадр данных без каких-либо изменений. Итак, вы хотите использовать
dat1_frame %>%
group_by(MONTH.YEAR) %>%
summarise(count=n())
Ответ 6
Просто для завершения решения data.table:
library(data.table)
mydf <- structure(list(ID = c(110L, 111L, 121L, 131L, 141L),
MONTH.YEAR = c("JAN. 2012", "JAN. 2012",
"FEB. 2012", "FEB. 2012",
"MAR. 2012"),
VALUE = c(1000L, 2000L, 3000L, 4000L, 5000L)),
.Names = c("ID", "MONTH.YEAR", "VALUE"),
class = "data.frame", row.names = c(NA, -5L))
setDT(mydf)
mydf[, .(`Number of rows` = .N), by = MONTH.YEAR]
MONTH.YEAR Number of rows
1: JAN. 2012 2
2: FEB. 2012 2
3: MAR. 2012 1
Ответ 7
Вот еще один способ использования aggregate
для подсчета строк по группам:
my.data <- read.table(text = '
month.year my.cov
Jan.2000 apple
Jan.2000 pear
Jan.2000 peach
Jan.2001 apple
Jan.2001 peach
Feb.2002 pear
', header = TRUE, stringsAsFactors = FALSE, na.strings = NA)
rows.per.group <- aggregate(rep(1, length(my.data$month.year)),
by=list(my.data$month.year), sum)
rows.per.group
# Group.1 x
# 1 Feb.2002 1
# 2 Jan.2000 3
# 3 Jan.2001 2
Ответ 8
Предположим, что у нас есть фрейм данных df_data, как показано ниже
> df_data
ID MONTH-YEAR VALUE
1 110 JAN.2012 1000
2 111 JAN.2012 2000
3 121 FEB.2012 3000
4 131 FEB.2012 4000
5 141 MAR.2012 5000
Чтобы подсчитать количество строк в df_data, сгруппированных по столбцу MONTH-YEAR, вы можете использовать:
> summary(df_data$`MONTH-YEAR`)
FEB.2012 JAN.2012 MAR.2012
2 2 1
сводная функция создаст таблицу из аргумента фактора, а затем создаст вектор для результата (строки 7 и 8).