repex dplyr summarize 在数据行九上产生错误:为什么?

repex dplyr summarise yields error on data line nine: Why?

我有一个包含 87 个变量和大约 900 万个观察值的数据集。最早几年不收集资料的人数children。我试图为这些家庭估算 children 的价值。下面的函数试图总结育龄妇女与我的估算值之间的比率,以与那些年的人口普查估计值进行比较。当我 运行 下面的代码块在我的完整数据集上时,

library(tidyverse)
mid2  %>% filter(year < 1968)   %>% 
  group_by(hh_id)    %>% 
  summarise(hh_fem  = .data$n_fem  * (.data$pernum == 1), 
           hh_kids  = .data$n_kids * (.data$pernum == 1))  %>%   
  summarise(tot_fem = sum(hh_fem), 
            totkids = sum(hh_kids))    ->  fk

得到这个错误:

Error in summarise_impl(.data, dots) : 
  Column `hh_fem` must be length 1 (a summary value), not 2

对 1968 年之前年份的初始限制将行限制为前 400 多千行。只看前五行,我没有得到错误和我期望的答案。通过反复试验,我确定我可以只用前九行重现错误,并且只重现函数中引用但未在此处创建的变量。这些行转载如下。该函数在行 1:8.

上正常工作
smidgen <- select(mid2[9, ], year, hh_id, n_fem, pernum, numprec, n_kids)

smidgen
# A tibble: 9 x 6
# Groups:   hh_id [8]
   year      hh_id n_fem pernum numprec    n_kids
  <dbl>      <chr> <int>  <dbl>   <dbl>     <dbl>
1  1962 1962300001     1      1       1 0.9466731
2  1962 1962300002     0      1       1 0.0000000
3  1962 1962300003     0      1       1 0.0000000
4  1962 1962300004     0      1       1 0.0000000
5  1962 1962300005     0      1       1 0.0000000
6  1962 1962300006     0      1       1 0.0000000
7  1962 1962300007     0      1       1 0.0000000
8  1962 1962300008     2      1       2 1.8933462
9  1962 1962300008     2      2       2 1.8933462

确实,我仅从第 8:9 行生成了相同的错误。但是,不是从第 8 行或第 9 行中单独获取的。

我在第 9 行没有看到任何导致此问题的内容。实际上,我看不出第 9 行中的任何值如何改变 hh_fem.

的宽度

非常感谢您的建议和想法。

第一次调用 summarise 时出错:

 summarise(hh_fem  = .data$n_fem  * (.data$pernum == 1)

如果要将变量 pernum 中的观察值过滤为值为 1 的值,则必须先调用 filter() 函数,然后再调用 summarise()函数

您的代码应该适用于此更改:

 mid2  %>% filter(year < 1968)   %>% 
 filter(pernum == 1) %>%
 group_by(hh_id)    %>% 
 summarise(hh_fem  = n_fem  * pernum, 
           hh_kids  = n_kids * pernum)  %>%   
 summarise(tot_fem = sum(hh_fem), 
        totkids = sum(hh_kids))    ->  fk

以后请post一个reprex以便轻松重现您的问题