我有一个具有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
,以便轻松复制您的问题