我在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))
但它没有产生所需的输出。我怎么能这样做?
答案 0 :(得分:36)
count()
中的plyr
功能可以满足您的需求:
library(plyr)
count(mydf, "MONTH-YEAR")
答案 1 :(得分:30)
以下是一个示例,其中显示了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 :(得分:11)
使用Ananda dummied的示例数据集,这是使用aggregate()
的示例,它是核心R的一部分。aggregate()
只需要计算一些事物来计算{{1的不同值的函数}}。在这种情况下,我使用MONTH-YEAR
作为计算的东西:
VALUE
给你..
aggregate(cbind(count = VALUE) ~ MONTH.YEAR,
data = mydf,
FUN = function(x){NROW(x)})
答案 3 :(得分:6)
尝试在dplyr中使用count函数:
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())
答案 4 :(得分:5)
library(plyr)
ddply(data, .(MONTH-YEAR), nrow)
这将为您提供答案,如果&#34; MONTH-YEAR&#34;是一个变量。 首先,尝试唯一(数据$ MONTH-YEAR)并查看它是否返回唯一值(没有重复)。
然后,上面简单的split-apply-combine将返回您要查找的内容。
答案 5 :(得分:3)
只是为了完成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
答案 6 :(得分:0)
假设我们有一个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
要计算按MONTH-YEAR列分组的df_data中的行数,您可以使用:
> summary(df_data$`MONTH-YEAR`)
FEB.2012 JAN.2012 MAR.2012
2 2 1
答案 7 :(得分:0)
以下是使用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