R中的条件计数和分组

时间:2014-09-25 15:28:55

标签: r count conditional aggregation

如果符合条件type,我想计算每x == 0行的行数。在SQL

中类似于一个组

以下是数据的示例

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

5 个答案:

答案 0 :(得分:8)

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

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

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

'数据'是R

中数据集的对象名称

修改

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

table(data$type, data$x)

答案 1 :(得分:4)

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

答案 2 :(得分:2)

鉴于数据框架, 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

答案 3 :(得分:2)

您也可以使用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 :(得分:1)

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

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万。