str_replace 和 gsub 之间的不同行为
Different behaviour between str_replace and gsub
我注意到 stringr::str_replace
和 gsub
之间的不同行为。
示例数据:
dat <- structure(list(country_name = c("Burkina", "Burkina", "Burkina",
"Burkina", "Burkina", "Burkina"), region_name = c("BOUCLE DU MOUHOUN_NA",
"BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA",
"BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA"), lat = c("NA_NA",
"NA_NA", "NA_NA", "NA_NA", "NA_NA", "NA_NA"), lon = c("NA_NA",
"NA_NA", "NA_NA", "NA_NA", "NA_NA", "NA_NA"), farm_size_ha = c("3_NA",
"5.67_NA", "8_NA", "46_NA", "29.5_NA", "20_NA"), plot_number = c("4_NA_NA",
"5_NA_NA", "3_NA_NA", "3_NA_NA", "9_NA_NA", "5_NA_NA")), row.names = c(NA,
6L), class = "data.frame")
使用str_replace
:
dat %>% mutate_all(~str_replace(., pattern = 'NA_|_NA', replacement = ''))
给出:
country_name region_name lat lon farm_size_ha plot_number
Burkina BOUCLE DU MOUHOUN NA NA 3 4_NA
Burkina BOUCLE DU MOUHOUN NA NA 5.67 5_NA
Burkina BOUCLE DU MOUHOUN NA NA 8 3_NA
Burkina BOUCLE DU MOUHOUN NA NA 46 3_NA
Burkina BOUCLE DU MOUHOUN NA NA 29.5 9_NA
Burkina BOUCLE DU MOUHOUN NA NA 20 5_NA
使用gsub
:
dat %>% mutate_all(~gsub(pattern = 'NA_|_NA', replacement = '', .))
给出所需的输出:
country_name region_name lat lon farm_size_ha plot_number
Burkina BOUCLE DU MOUHOUN NA NA 3 4
Burkina BOUCLE DU MOUHOUN NA NA 5.67 5
Burkina BOUCLE DU MOUHOUN NA NA 8 3
Burkina BOUCLE DU MOUHOUN NA NA 46 3
Burkina BOUCLE DU MOUHOUN NA NA 29.5 9
Burkina BOUCLE DU MOUHOUN NA NA 20 5
你能解释一下为什么他们的行为不同吗?以及如何强制 str_replace
表现得像 gsub
?
str_replace
(如sub
)仅删除第一次出现,如果您需要删除所有出现的事件,您可以使用str_replace_all
(如gsub
)。
library(dplyr)
library(stringr)
dat %>% mutate(across(.fns = ~str_replace_all(., pattern = 'NA_|_NA', replacement = '')))
或者使用 @csgroen 提到的 str_remove_all
,shorthand 代表 str_replace_all
,replacement
代表 ""
。
dat %>% mutate(across(.fns = ~str_remove_all(., pattern = 'NA_|_NA')))
# country_name region_name lat lon farm_size_ha plot_number
#1 Burkina BOUCLE DU MOUHOUN NA NA 3 4
#2 Burkina BOUCLE DU MOUHOUN NA NA 5.67 5
#3 Burkina BOUCLE DU MOUHOUN NA NA 8 3
#4 Burkina BOUCLE DU MOUHOUN NA NA 46 3
#5 Burkina BOUCLE DU MOUHOUN NA NA 29.5 9
#6 Burkina BOUCLE DU MOUHOUN NA NA 20 5
我注意到 stringr::str_replace
和 gsub
之间的不同行为。
示例数据:
dat <- structure(list(country_name = c("Burkina", "Burkina", "Burkina",
"Burkina", "Burkina", "Burkina"), region_name = c("BOUCLE DU MOUHOUN_NA",
"BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA",
"BOUCLE DU MOUHOUN_NA", "BOUCLE DU MOUHOUN_NA"), lat = c("NA_NA",
"NA_NA", "NA_NA", "NA_NA", "NA_NA", "NA_NA"), lon = c("NA_NA",
"NA_NA", "NA_NA", "NA_NA", "NA_NA", "NA_NA"), farm_size_ha = c("3_NA",
"5.67_NA", "8_NA", "46_NA", "29.5_NA", "20_NA"), plot_number = c("4_NA_NA",
"5_NA_NA", "3_NA_NA", "3_NA_NA", "9_NA_NA", "5_NA_NA")), row.names = c(NA,
6L), class = "data.frame")
使用str_replace
:
dat %>% mutate_all(~str_replace(., pattern = 'NA_|_NA', replacement = ''))
给出:
country_name region_name lat lon farm_size_ha plot_number
Burkina BOUCLE DU MOUHOUN NA NA 3 4_NA
Burkina BOUCLE DU MOUHOUN NA NA 5.67 5_NA
Burkina BOUCLE DU MOUHOUN NA NA 8 3_NA
Burkina BOUCLE DU MOUHOUN NA NA 46 3_NA
Burkina BOUCLE DU MOUHOUN NA NA 29.5 9_NA
Burkina BOUCLE DU MOUHOUN NA NA 20 5_NA
使用gsub
:
dat %>% mutate_all(~gsub(pattern = 'NA_|_NA', replacement = '', .))
给出所需的输出:
country_name region_name lat lon farm_size_ha plot_number
Burkina BOUCLE DU MOUHOUN NA NA 3 4
Burkina BOUCLE DU MOUHOUN NA NA 5.67 5
Burkina BOUCLE DU MOUHOUN NA NA 8 3
Burkina BOUCLE DU MOUHOUN NA NA 46 3
Burkina BOUCLE DU MOUHOUN NA NA 29.5 9
Burkina BOUCLE DU MOUHOUN NA NA 20 5
你能解释一下为什么他们的行为不同吗?以及如何强制 str_replace
表现得像 gsub
?
str_replace
(如sub
)仅删除第一次出现,如果您需要删除所有出现的事件,您可以使用str_replace_all
(如gsub
)。
library(dplyr)
library(stringr)
dat %>% mutate(across(.fns = ~str_replace_all(., pattern = 'NA_|_NA', replacement = '')))
或者使用 @csgroen 提到的 str_remove_all
,shorthand 代表 str_replace_all
,replacement
代表 ""
。
dat %>% mutate(across(.fns = ~str_remove_all(., pattern = 'NA_|_NA')))
# country_name region_name lat lon farm_size_ha plot_number
#1 Burkina BOUCLE DU MOUHOUN NA NA 3 4
#2 Burkina BOUCLE DU MOUHOUN NA NA 5.67 5
#3 Burkina BOUCLE DU MOUHOUN NA NA 8 3
#4 Burkina BOUCLE DU MOUHOUN NA NA 46 3
#5 Burkina BOUCLE DU MOUHOUN NA NA 29.5 9
#6 Burkina BOUCLE DU MOUHOUN NA NA 20 5