【问题标题】:no applicable method for 'filter_' applied to an object of class “c('double', 'numeric')” when using `count`使用“count”时,没有适用于“filter_”的方法应用于“c('double','numeric')”类的对象
【发布时间】:2021-06-01 09:18:09
【问题描述】:

使用下面的代码,我试图根据“权重”列在每次迭代中每年加权。 使用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") 中的错误: 没有适用于“c('double', 'numeric')”类对象的“count”方法。 我该如何解决?

这是我的代码:

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

【问题讨论】:

  • 我们的代码在哪里?您的预期结果是什么?
  • @Onyambu 请看我的输出。
  • 您如何获得该输出?
  • 这只是我的预期输出
  • 是的,到达那里的逻辑是什么?

标签: r


【解决方案1】:

您可以将嵌套列表合并到一个数据框中,并使用completeweight 的缺失观测值填充为0。

library(tidyverse)

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

【讨论】:

  • 感谢@Ronak shah。如果我只想有特定的年份和迭代怎么办?
  • 你可以filter你想要的值。 %&gt;% filter(iter == 'iter1', year == 'year1')
  • 我收到此错误没有适用于“过滤器”的方法应用于“列表”类的对象
  • @mehmo 您需要在complete 之后添加filter 步骤。使用map_df(df, ~bind_rows(.x, .id = 'year'), .id = 'iter') %&gt;% complete(iter, year, age, district, gender, fill = list(weight = 0)) %&gt;% dplyr::filter(iter == 'iter1', year == 'year1') 时我没有收到任何此类错误
  • 实际上它有效但产生 0 观察
猜你喜欢
  • 2021-08-17
  • 2022-10-05
  • 1970-01-01
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多