r中的聚合正在删除表中的0计数。如何让它表现出来?

r中的聚合正在删除表中的0计数。如何让它表现出来?,r,aggregate,summarize,R,Aggregate,Summarize,我正在尝试使用aggregate中的FUN参数生成一个带有aggregate的表,以便进一步处理。这是我的密码 var <- c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,

我正在尝试使用
aggregate
中的
FUN
参数生成一个带有
aggregate
的表,以便进一步处理。这是我的密码

var <- c(1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0)

aggregate(var, list(group), FUN = table)
预期结果应如下所示:

  Group.1  x.0  x.1
1       1  61   3
2       2 112   3
3       3  30   2
4       4  21   0

我该如何解决这个问题

我们需要将“var”创建为
因子
,其中
级别
指定为0和1。这将确保如果计数为0,则特定列将显示为0

var <- factor(var, levels = 0:1)
out <- aggregate(var, list(group), FUN = table)
out
#   Group.1 x.0 x.1
#1       1  29  21
#2       2  29  21
#3       3  23  27
#4       4   0  50
请注意,这些操作将生成一个带有两列的
矩阵
'x'。以便具有常规的
data.frame

do.call(data.frame, out)

或者,如果需要更改,我们也可以得到1s的
,然后
重塑

reshape(aggregate(cbind(n = rep(1, length(group))) ~ 
  group+ var, FUN = sum), idvar = 'group', direction = 'wide', timevar = 'var')

如果我们使用的是
tidyverse
,而不是
类中的任何更改,即转换为
因子
,则使用两个变量进行
计数
,然后
将其扩展为“宽”格式

library(tidyverse)
tibble(var, group) %>% 
    count(var, group) %>%
    spread(var, n, fill = 0)
# A tibble: 4 x 3
#  group   `0`   `1`
#  <int> <dbl> <dbl>
#1     1    29    21
#2     2    29    21
#3     3    23    27
#4     4     0    50
库(tidyverse)
TIBLE(变量,组)%>%
计数(变量,组)%>%
排列(变量n,填充=0)
#一个tibble:4x3
#组'0``1`
#    
#1     1    29    21
#2     2    29    21
#3     3    23    27
#4     4     0    50
数据
set.seed(24)
变量
reshape(aggregate(cbind(n = rep(1, length(group))) ~ 
  group+ var, FUN = sum), idvar = 'group', direction = 'wide', timevar = 'var')
library(tidyverse)
tibble(var, group) %>% 
    count(var, group) %>%
    spread(var, n, fill = 0)
# A tibble: 4 x 3
#  group   `0`   `1`
#  <int> <dbl> <dbl>
#1     1    29    21
#2     2    29    21
#3     3    23    27
#4     4     0    50
set.seed(24)
var <- sample(0:1, 200, replace = TRUE)
var[151:200] <- 1
group <- rep(1:4, each = 50)