我的问题是如何改进我怀疑是低效的代码。
我有两个数据:一个包含县级灾害信息数据,另一个包含县级人均收入数据。作为第一步,我感兴趣的是找出哪些县的人均收入数据缺失。下面是示例数据格式的内容:
counties <- data.frame(polyname = c("alabama,autauga","alabama,autauga",
"alabama,baldwin","alabama,baldwin",
"alabama,barbour","alabama,barbour",
"alabama,bibb", "alabama,bibb"),
indAnyDisaster_frequency = c("1-2", "1-2", "0", "0",
"3-5", "3-5", "1-2","1-2"))
counties_persinc_1980 <- data.frame(polyname = c("alabama,autauga","alabama,autauga",
"alabama,baldwin","alabama,baldwin",
"alabama,barbour","alabama,barbour",
"alabama,bibb", "alabama,bibb"),
persinc_1980 = c(NA, NA, NA, NA, 25, 30, 32, 28))
no_persinc_1980 <- unique(counties_persinc_1980$polyname[is.na(counties_persinc_1980$persinc_1980)])现在,如果相同索引的县$polyname与向量的元素匹配,我希望使用缺失县名的向量来替换counties$indAnyDisaster_frequency。我相信我已经能够通过一个for循环来实现这一点,但我不认为它是非常有效的。然而,我一直未能弄清楚如何使用来实现同样的结果。我已经包括了循环的代码和我尝试使用lapply的一次尝试。
for(i in 1:length(no_persinc_1980)){
counties$indAnyDisaster_frequency[counties$polyname==no_persinc_1980[i]] <- NA
}
lapply(1:length(no_persinc_1980), function(x) counties$indAnyDisaster_frequency[counties$polyname==no_persinc_1980[x]] <- NA)如能就如何改进这一办法提供任何指导,将不胜感激。
发布于 2022-10-26 18:59:17
idx <- which(counties$polyname %in% no_persinc_1980)
counties[ idx, 'indAnyDisaster_frequency' ] <- NA发布于 2022-10-26 18:58:50
不需要循环。我会调查一下%in%
counties$indAnyDisaster_frequency[counties$polyname %in% no_persinc_1980] <- NA
counties
#> polyname indAnyDisaster_frequency
#> 1 alabama,autauga <NA>
#> 2 alabama,autauga <NA>
#> 3 alabama,baldwin <NA>
#> 4 alabama,baldwin <NA>
#> 5 alabama,barbour 3-5
#> 6 alabama,barbour 3-5
#> 7 alabama,bibb 1-2
#> 8 alabama,bibb 1-2发布于 2022-10-26 18:58:38
library(tidyverse)用NA在persinc_1980列中提取县名
counties_nas <- counties_persinc_1980 %>%
filter(is.na(persinc_1980)) %>%
unique() %>%
pull(polyname)如果向量中存在多个名称,则将indAnyDisaster_frequency转换为NA
counties %>%
mutate(indAnyDisaster_frequency = case_when(polyname %in% counties_nas ~ NA_character_,
TRUE ~ indAnyDisaster_frequency))
polyname indAnyDisaster_frequency
<chr> <chr>
1 alabama,autauga NA
2 alabama,autauga NA
3 alabama,baldwin NA
4 alabama,baldwin NA
5 alabama,barbour 3-5
6 alabama,barbour 3-5
7 alabama,bibb 1-2
8 alabama,bibb 1-2 https://stackoverflow.com/questions/74212851
复制相似问题