【问题标题】:count of entries in data frame in RR中数据框中的条目数
【发布时间】:2010-12-21 06:38:33
【问题描述】:

我正在寻找以下数据框的计数:

> 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

相信的孩子的数量。我会使用什么命令来获取它?

(实际的数据框要大得多。我刚刚给你前四行...)

谢谢!

【问题讨论】:

    标签: r count dataframe


    【解决方案1】:

    使用sqldf 适合这里:

    library(sqldf)
    sqldf("SELECT Believe, Count(1) as N FROM Santa
           GROUP BY Believe")
    

    【讨论】:

      【解决方案2】:

      data.table单行解决方案可能是

      library(data.table)
      setDT(x)[,.N,by=Believe]
         Believe N
      1:   FALSE 1
      2:    TRUE 3
      

      【讨论】:

        【解决方案3】:

        DPLYR 让这一切变得非常简单。

        x<-santa%>%
           count(Believe)
        

        如果您想按组计数;例如,有多少男性与女性相信,只需添加一个group_by

        x<-santa%>%
           group_by(Gender)%>%
           count(Believe)
        

        【讨论】:

          【解决方案4】:

          你可以做summary(santa$Believe),你会得到TRUEFALSE的计数

          【讨论】:

            【解决方案5】:

            我认为这是一个两步过程:

            1. 根据提供的过滤器对原始数据帧进行子集化 (相信==错误);那么

            2. 获取该子集的行数

            对于第一步,subset 函数是一个很好的方法(只是普通索引或 括号 符号的替代) .

            对于第二步,我会使用 dimnrow

            使用 subset 的一个优点:你不必解析它返回的结果来获得你需要的结果——只需直接调用 nrow 就可以了。

            所以在你的情况下:

            v = nrow(subset(Santa, Believe==FALSE))     # 'subset' returns a data.frame
            

            或包裹在一个匿名函数中

            >> fnx = function(fac, lev){nrow(subset(Santa, fac==lev))}
            
            >> fnx(Believe, TRUE)
                  3
            

            除了 nrowdim 也可以完成这项工作。此函数返回数据框(行、列)的维度,因此您只需提供适当的索引即可访问行数:

            v = dim(subset(Santa, Believe==FALSE))[1] 
            

            在此之前发布的 OP 的答案显示了列联表的使用。对于 OP 中所述的一般问题,我不喜欢这种方法。这就是原因。当然,这个数据框中有多少行在 C 列中有 x 值?这个一般问题可以使用列联表以及“过滤”方案来回答(如我在此处的回答) .如果您想要给定因子变量(列)的所有值的行数,那么列联表(通过调用 table 并传入感兴趣的列)是最明智的解决方案;但是,OP 要求计算因子变量中的 特定 值,而不是计算所有值。除了性能损失(可能很大,也可能微不足道,仅取决于数据帧的大小和该函数所在的处理管道上下文)。当然,一旦返回对 table 的调用的结果,您仍然必须从该结果中 parse 只是您想要的计数。

            这就是为什么,对我来说,这是一个过滤而不是交叉表问题。

            【讨论】:

            • 事实上nrow 只是dim 的包装
            【解决方案6】:
            sum(Santa$Believe)
            

            【讨论】:

            • 我认为这可能是最快的方式。
            • 这是针对这种特殊情况的最快解决方案,毫无疑问。
            【解决方案7】:

            你可以使用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 
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2023-01-23
              • 2020-04-29
              • 2018-05-16
              • 1970-01-01
              • 1970-01-01
              • 2018-09-15
              • 2022-06-10
              • 2021-11-19
              相关资源
              最近更新 更多