首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据变量是否匹配向量中的项将值替换为NA (

根据变量是否匹配向量中的项将值替换为NA (
EN

Stack Overflow用户
提问于 2022-10-26 18:50:07
回答 3查看 32关注 0票数 0

我的问题是如何改进我怀疑是低效的代码。

我有两个数据:一个包含县级灾害信息数据,另一个包含县级人均收入数据。作为第一步,我感兴趣的是找出哪些县的人均收入数据缺失。下面是示例数据格式的内容:

代码语言:javascript
复制
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的一次尝试。

代码语言:javascript
复制
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)

如能就如何改进这一办法提供任何指导,将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2022-10-26 18:59:17

代码语言:javascript
复制
idx <- which(counties$polyname %in% no_persinc_1980)
counties[ idx, 'indAnyDisaster_frequency' ] <- NA
票数 1
EN

Stack Overflow用户

发布于 2022-10-26 18:58:50

不需要循环。我会调查一下%in%

代码语言:javascript
复制
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
票数 1
EN

Stack Overflow用户

发布于 2022-10-26 18:58:38

代码语言:javascript
复制
library(tidyverse)

NApersinc_1980列中提取县名

代码语言:javascript
复制
counties_nas <- counties_persinc_1980 %>% 
  filter(is.na(persinc_1980)) %>% 
  unique() %>% 
  pull(polyname)

如果向量中存在多个名称,则将indAnyDisaster_frequency转换为NA

代码语言:javascript
复制
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        
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74212851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档