替换数据框中所有出现的列
Replace all occurrences of columns in a data frame
我的数据框 hpds_all_clean
中有两列 Project ID
和 Project 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
我的数据框 hpds_all_clean
中有两列 Project ID
和 Project 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