r- repex dplyr总结数据线上的误差九:原因



我有一个具有87个变量和约900万观测值的数据集。最早的几年没有收集有关儿童人数的信息。我试图将数量儿童的价值归因于这些家庭。下面的功能试图总结育龄妇女与我的估计价值之间的比率,以与那些年的人口普查估计值进行比较。当我在完整数据集上运行下面的代码块时,

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(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

以后,请发布一个reprex,以便轻松复制您的问题