【问题标题】:Conditional count and group by in RR中的条件计数和分组依据
【发布时间】:2014-11-20 10:51:34
【问题描述】:

如果满足条件x == 0,我想计算每个type 有多少行。有点像 SQL 中的 group by

这里是数据示例

  type    x    
search    0 
NULL      0 
public    0
search    1
home      0
home      1
search    0

【问题讨论】:

  • 您能否包含一个带有 R 代码的数据示例?我很难理解您的要求以及您的示例如何适合...
  • 当包括样本输入时,还包括所需的输出。见how to make a reproducible example

标签: r count conditional aggregation


【解决方案1】:

我假设您想在满足特定条件(当变量具有某个值时)时查找行数。

如果是这种情况,那么我想您将“x”作为列中表示的变量。 “x”可以取多个值。假设您想在 x 为 0 时查找数据中有多少行。这可以通过以下方式完成:

nrow(subset(data, x=="0")

'data' 是 R 中数据集的对象名称

编辑:

我现在正在查看您编辑的数据框。你可以用它来解决你的问题:

table(data$type, data$x)

【讨论】:

  • 我想计算一个变量(任务)在一个月内出现的频率(月份是从 1 到 12 的变量),我该怎么做?
【解决方案2】:

您也可以使用 sqldf 包:

library(sqldf)
df <- data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0))
sqldf("SELECT type, COUNT(*) FROM df WHERE x=0 GROUP BY type")

给出以下结果:

    type COUNT(*)
1   NULL        1
2   home        1
3 public        1
4 search        2

【讨论】:

    【解决方案3】:

    您也可以使用 dplyr 包来做到这一点:

    library(dplyr)
    
    df2 <- df %>% group_by(x,type) %>% tally()
    

    给出:

      x   type n
    1 0   home 1
    2 0   NULL 1
    3 0 public 1
    4 0 search 2
    5 1   home 1
    6 1 search 1
    

    【讨论】:

      【解决方案4】:

      给定数据框, df=data.frame(type=c('search','NULL','public','search','home','home','search'),x=c(0,0,0,1,0,1,0))

      如果您想知道第 1 列中的每个值中有多少在第 2 列中的值为零,那么您可以使用: table(df)[,1]

      只要您只使用 1 和 0 来获得答案:

        home   NULL public search 
           1      1      1      2
      

      【讨论】:

        【解决方案5】:

        鉴于您的数据结构为数据框,以下代码的运行时间比上面给出的答案要好:

        nrow(data[data$x=="0"])
        

        您可以使用以下方法测试您的运行时间:

        ptm <- proc.time()
        nrow(subset(data, x == "0"))
        proc.time() - ptm
        
        ptm <- proc.time()
        nrow(data[data$x=="0"]))
        proc.time() - ptm
        

        在我的例子中,运行时间快了大约 15 倍,有 100 万行。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-09-02
          • 2021-05-13
          • 2018-07-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-25
          • 2021-04-11
          相关资源
          最近更新 更多