我是R的新手,正在从事一个小项目:
Repex:
> head(filterdacsom4)
Year Zip Total_Population Median_Income City State
1 2017 ZCTA5 00601 17599 11757 Adjuntas PR
2 2017 ZCTA5 00602 39209 16190 Aguada PR
3 2017 ZCTA5 00603 50135 16645 Aguadilla PR
4 2017 ZCTA5 00606 6304 13387 Maricao PR
5 2017 ZCTA5 00610 27590 18741 Anasco PR
6 2017 ZCTA5 00612 62566 17744 Arecibo PR
我正在尝试使用dplyr和tidyverse进行变异,并为人口与收入比率创建一个新列,然后找出哪个邮政编码在2017年具有最高的人口与收入比率
我的输入:
demograph_ratio <- filterdacsom4 %>% dplyr::filter(Year %in% c(2017)) %>%
spread(Year,Median_Income) %>% group_by(Zip) %>%
mutate(Poptoincomeratio = Total_Population/Median_Income)
demograph_ratio
但是,当我执行上述操作时,我收到一条错误消息:
Error in mutate_impl(.data, dots) :
Evaluation error: object 'Median_Income' not found.
这很奇怪,因为当我尝试调试它时:
filterdacsom4$Median_Income
它确实显示正确的输出:
[1] 11757 16190 16645 13387 18741 17744 14918 17157 16727 16401
[11] 16832 17579 9632 15736 14448 16292 29160 13071 16095 20564
[21] 12236 14966 17770 19674 16771 15401 13843 12996 14456 18032
[31] 13416 18333 15730 14500 15315 15043 14128 18739 15918 18491
[41] 18076 18971 14375 14487 16532 13960 18207 17489 15820 12440
为什么我会收到此错误,并且有更好的方法对此进行编码,以便根据邮政编码找到人口与收入的比率
答案 0 :(得分:1)
我为Year和Zip之间的缺失列输入了一个虚拟列名,我看不出有进行散布操作的原因,于是取出来,一切似乎都可以正常工作:
demograph_ratio <- filterdacsom4 %>% filter(Year %in% c(2017)) %>%
group_by(Zip) %>%
mutate(Poptoincomeratio = Total_Population/Median_Income)
> demograph_ratio
# A tibble: 6 x 8
# Groups: Zip [6]
Year code Zip Total_Population Median_Income City State Poptoincomeratio
<int> <fct> <int> <int> <int> <fct> <fct> <dbl>
1 2017 ZCTA5 601 17599 11757 Adjuntas PR 1.50
2 2017 ZCTA5 602 39209 16190 Aguada PR 2.42
3 2017 ZCTA5 603 50135 16645 Aguadilla PR 3.01
4 2017 ZCTA5 606 6304 13387 Maricao PR 0.471
5 2017 ZCTA5 610 27590 18741 Anasco PR 1.47
6 2017 ZCTA5 612 62566 17744 Arecibo PR 3.53
如果您想查看在spread
操作之后为什么没有Year或Median_Income列的原因,请查看传递给mutate
的“中间结果”
not_ratio <- filterdacsom4 %>% filter(Year %in% c(2017)) %>%
spread(Year,Median_Income)
> not_ratio
code Zip Total_Population City State 2017
1 ZCTA5 601 17599 Adjuntas PR 11757
2 ZCTA5 602 39209 Aguada PR 16190
3 ZCTA5 603 50135 Aguadilla PR 16645
4 ZCTA5 606 6304 Maricao PR 13387
5 ZCTA5 610 27590 Anasco PR 18741
6 ZCTA5 612 62566 Arecibo PR 17744
答案 1 :(得分:0)
在spread
中似乎有两个参数,Median_Income
的列名更改为year
的值:
demograph_ratio <- filterdacsom4 %>% dplyr::filter(Year %in% c(2017)) %>%
spread(Year,Median_Income) %>% group_by(Zip)
demograph_ratio
Zip Total_Population City State `2017`
<chr> <dbl> <chr> <chr> <dbl>
1 ZCTA5 00601 17599 Adjuntas PR 11757
2 ZCTA5 00602 39209 Aguada PR 16190
3 ZCTA5 00603 50135 Aguadilla PR 16645
4 ZCTA5 00606 6304 Maricao PR 13387
5 ZCTA5 00610 27590 Anasco PR 18741
6 ZCTA5 00612 62566 Arecibo PR 17744
由于42已经显示了答案而不进行传播操作,因此我将其保留在此处