替换数据框中所有出现的列

Replace all occurrences of columns in a data frame

我的数据框 hpds_all_clean 中有两列 Project IDProject Number,其中包含 NA,我正在尝试用“未公开的项目 ID”替换所有出现的 NA,并且“未公开的项目编号”。以下是我的一些尝试,但有同样的错误:

target of assignment expands to non-language object

使用gsub():

hpds_all_clean %>%
  filter(`Recipient Name-EN` == "Afghanistan") %>%
  hpds_all_clean$`Project Title - EN` = gsub("", "Undisclosed Project ID", hpds_all_clean$`Project Title - EN`) %>%
  hpds_all_clean$`Project Number/Numéro de projet` = gsub("", "Undisclosed Project Number", hpds_all_clean$`Project Number/Numéro de projet`)

使用paste0()

hpds_all_clean %>%
  filter(`Recipient Name-EN` == "Afghanistan") %>%
  paste0(hpds_all_clean, hpds_all_clean$`Project Title - EN`) = "Undisclosed Project ID" %>%
  paste0(hpds_all_clean, hpds_all_clean$`Project Number/Numéro de projet`) = "Undisclosed Project Number"

如有任何建议,我们将不胜感激。感谢您的宝贵时间!

如果这些值是 NA 你可以做

hpds_all_clean %>% 
  mutate(`Project Title - EN` = if_else(is.na(`Project Title - EN`),"Undisclosed Project ID",`Project Title - EN`),
         `Project Number/Numéro de projet` = if_else(is.na(`Project Number/Numéro de projet`),"Undisclosed Project Number",`Project Number/Numéro de projet`))

如果这些“NA”值实际上是“”,您可以在上面编辑为:if_else(`Project Title - EN` == ""),等等

tidyr 包中的

replace_na() 可以帮助解决这个问题:

df <- data.frame(
  projectID = c('ABC', NA, "DEF", "HIJ", NA),
  projectNumber = c('LMN', "OPQ", "RST", NA, "UVW")
)

df %>% tidyr::replace_na(
  list(
    projectID = "Undisclosed Project ID",
    projectNumber = "Undisclosed Project Number"
  )
)

输出:

               projectID              projectNumber
1                    ABC                        LMN
2 Undisclosed Project ID                        OPQ
3                    DEF                        RST
4                    HIJ Undisclosed Project Number
5 Undisclosed Project ID                        UVW