Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于组统计R中数据帧中的行数_R_Dataframe_Rowcount - Fatal编程技术网

基于组统计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 will
table()
给我每年每个月的行数?我已经修改了上面的帖子,以显示我想要的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`
每当我需要完成这类任务时,我都会使用这个食谱。我发现这个食谱很容易阅读,也很容易记住。赞成。