首页 > 解决方案 > 使用“count”时,没有适用于“filter_”的方法应用于“c('double','numeric')”类的对象

问题描述

使用下面的代码,我试图根据“权重”列在每次迭代中每年加权。使用wtd.table我有以下代码:

wtd.table(result$`it 1`$`year 5`$age,result$`it 1`$`year 5`$gender ,result$`it 1`$`year 5`$district, weights =result$`it 1`$`year 5`$weight )

此输出仅提供年龄和性别加权。它也不包括地区。基于我这样使用的一些目的count(var1, var2, var3 , wt = wt)

count(result$`it 1`$`year 5`$age,result$`it 1`$`year 5`$gender,
result$`it 1`$`year 5`$age,
wt = result$`it 1`$`year 5`$weight)

但我得到了这个错误:UseMethod(“count”)中的错误:没有适用于“count”的方法应用于类“c('double','numeric')”的对象。我该如何解决?

这是我的代码:

iter1 <- list(year1 =data.frame(age=c(10,11,12,13), district=c(1,2,3,4),gender=c(1,2,2,1)
,weight=c(12.2,11.3,11.2,10.1)),
year2 =data.frame(age=c(10,11,12,13), district=c(1,2,3,4),gender=c(1,2,2,1),weight=c(12.2,11.3,11.2,10.1)))

iter2 <- list(year1 =data.frame(age=c(10,11,12,13), district=c(1,2,3,4),gender=c(2,2,1,1)
,weight=c(12.2,11.3,11.2,10.1)),
year2 =data.frame(age=c(10,11,12,13), district=c(1,2,3,4),gender=c(2,2,1,1),weight=c(12.2,11.3,11.2,10.1)))

df <- list(iter1 = iter1, iter2 = iter2)

我的预期输出就像 df1

df1<-

district   age    gender  freq   
1          10       1     12.2
1          11       1      0.0 
1          12       1      0.0
1          13       1     10.1
1          10       2      0.0
1          11       2     11.3
1          12       2     11.2
1          13       2      0.0

标签: r

解决方案


您可以将嵌套列表组合在一个数据框中,并使用0complete填充缺失的观察weight值。

library(tidyverse)

map_df(df, ~bind_rows(.x, .id = 'year'), .id = 'iter') %>%
  complete(iter, year, age, district, gender, fill = list(weight = 0))

推荐阅读