基于组统计R中数据帧中的行数
我在基于组统计R中数据帧中的行数,r,dataframe,rowcount,R,Dataframe,Rowcount,我在R中有一个数据帧,如下所示: ID MONTH-YEAR VALUE 110 JAN. 2012 1000 111 JAN. 2012 2000 . . . . 121 FEB. 2012 3000 131 FEB. 2012 4000 . . . . MONTH-YEA
R
中有一个数据帧,如下所示:
ID MONTH-YEAR VALUE
110 JAN. 2012 1000
111 JAN. 2012 2000
. .
. .
121 FEB. 2012 3000
131 FEB. 2012 4000
. .
. .
MONTH-YEAR NUMBER OF ROWS
JAN. 2012 10
FEB. 2012 13
MAR. 2012 6
APR. 2012 9
因此,每年的每个月都有n
行,它们可以是任意顺序的(这意味着它们都不是连续的,而是处于中断状态)。我想计算每个月/年有多少行,即2012年1月有多少行,2012年2月有多少行,依此类推。大概是这样的:
ID MONTH-YEAR VALUE
110 JAN. 2012 1000
111 JAN. 2012 2000
. .
. .
121 FEB. 2012 3000
131 FEB. 2012 4000
. .
. .
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))
n_行
如果“月-年”是一个变量,这将为您提供答案。
首先,尝试unique(data$MONTH-YEAR),看看它是否返回唯一的值(没有重复)
然后,上面的简单拆分应用组合将返回您所需的内容。下面的示例显示了表格(.)
(或者,更接近您所需的输出,data.frame(表格(.))
如何执行您所要求的操作
还要注意如何以其他人可以复制并粘贴到会话中的方式共享可复制的样本数据
以下是(可复制的)样本数据:
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
使用Ananda模拟的示例数据集,下面是一个使用aggregate()
的示例,它是核心R的一部分。aggregate()
只需要一些东西作为月年
不同值的函数来计算。在这种情况下,我使用值
作为计算的东西:
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
plyr
中的count()
library(plyr)
count(mydf, "MONTH-YEAR")
假设我们有一个df_数据帧,如下所示
> 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_数据中的行数,可以使用:
> summary(df_data$`MONTH-YEAR`)
FEB.2012 JAN.2012 MAR.2012
2 2 1
summary函数将从factor参数创建一个表,然后为结果创建一个向量(第7行和第8行)下面是另一种使用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
my.data尝试在dplyr中使用count函数:
library(dplyr)
dat1_frame %>%
count(MONTH.YEAR)
我不确定您是如何将MONTH-YEAR作为变量名的。我的R版本不允许使用这样的变量名,因此我将其替换为MONTH.YEAR
作为旁注,您代码中的错误是,dat1\u frame%.%groupby(月-年)
没有summary
函数返回原始数据帧而不做任何修改。因此,您想使用
dat1_frame %>%
group_by(MONTH.YEAR) %>%
summarise(count=n())
仅为了完成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
库(data.table)
mydf尝试查看?聚合。我想您需要聚合(VALUE~MONTH-YEAR,data=dat1\u frame,FUN=function(x){NROW(x)})
@AnandaMahto willtable()
给我每年每个月的行数?我已经修改了上面的帖子,以显示我想要的output@AndyClifton我不关心数据框中的VALUE
列。我只需要每个月的总计数/行数。@AnandaMahto有3列。开头有一列类似于ID表示每行,但与我无关。我已在上述数据集示例中添加了ID列。我希望您所说的“可复制示例”不会起作用。data$MONTH-YEAR
将尝试从MONTH
列中减去一个名为YEAR
的向量。请引用名称:unique(data$“MONTH-YEAR”)
或在名称中使用点。我很确定ddply
示例也会失败。@Spacedman是的,你是对的。这是一个命名属性的错误示例。请编辑更多信息。不鼓励使用“仅代码”和“尝试此”答案,因为它们不包含可搜索的内容,也不解释为什么有人应该“尝试此”。我认为FUN=function(x){NROW(x)}
可以替换为NROW
或length
。是的,没错。但是假设您想对稍微不同的函数使用相同的方法,或者想添加一个naomit()-您需要使用此处显示的较长形式。为什么不使用聚合(my.cov~月.年,my.data,长度)
?这很好,谢谢。如果我想将ID与此结果一起打印,该怎么办?换句话说,ID到MONTH.YEAR,并且必须显示计数。此时,dplyr
将等同于plyr
。您可以使用包含字符的变量名,如-
,方法是用反勾引字符串。例如le,`MONTH-YEAR`
每当我需要完成这类任务时,我都会使用这个食谱。我发现这个食谱很容易阅读,也很容易记住。赞成。