我有以下向量
vector <- c(31, 41, 51, 61, 32, 42, 52, 62, 33, 43, 53, 63,
34, 44, 54, 64, 35, 45, 55, 65, 36, 46, 56, 66)
我只想替换前导数字,而不在发现该数字为单位数字时转换该数字
str_replace_all(vector, c('3' = 'Air', '4' = 'Car',
'5' = 'Polluted', '6' = 'Gas'))
所需的输出只是使用每个最后/单位数字作为标记,这意味着例如:
只要有
3(unit/digit)
,代码就应将其转换为:
'Air_(unit/digit)'
更清楚地为:
# [1] "Air_1" "Car_1" "Polluted_1"
# [4] "Gas_1" "Air_2" "Car_2"
# [7] "Polluted_2" "Gas_2" "Air_3"
# [10] "Car_3" "Polluted_3" "Gas_3"
# [13] "Air_4" "Car_4" "Polluted_4"
# [16] "Gas_4" "Air_5" "Car_5"
# [19] "Polluted_5" "Gas_5" "Air_6"
# [22] "Car_6" "Polluted_6" "Gas_6"
您能建议任何快速的方法吗?谢谢
这是另一个解决方案:
str_replace_all(vector, c('^3' ='Air_', '^4'='Car_',
'^5' = 'Polluted_', '^6' = 'Gas_'))
假设我们总是有 2 位数字,使用算术运算符
%%
获得第一个数字,使用 %/%
获得余数 - 第二个数字。然后根据需要粘贴所有内容:
paste(
c('3' = 'Air', '4' = 'Car', '5' = 'Polluted', '6' = 'Gas')[
as.character(vector %/% 10) ],
vector %% 10, sep = "_")
# [1] "Air_1" "Car_1" "Polluted_1"
# [4] "Gas_1" "Air_2" "Car_2"
# [7] "Polluted_2" "Gas_2" "Air_3"
# [10] "Car_3" "Polluted_3" "Gas_3"
# [13] "Air_4" "Car_4" "Polluted_4"
# [16] "Gas_4" "Air_5" "Car_5"
# [19] "Polluted_5" "Gas_5" "Air_6"
# [22] "Car_6" "Polluted_6" "Gas_6"
您可能正在寻找更奇特的解决方案,但这就是您正在寻找的吗?
library("stringr")
vector <- c(31, 41, 51, 61, 32, 42, 52, 62, 33, 43, 53, 63, 34, 44, 54,
64, 35, 45, 55, 65, 36, 46, 56, 66)
paste0(
str_replace_all(stringr::str_extract(vector, "[[:digit:]]"),
c('3' ='Air', '4'='Car',
'5' = 'Polluted', '6' = 'Gas')),
"_(",
str_extract(vector, "[[:digit:]]$"),
")"
)
#> [1] "Air_(1)" "Car_(1)" "Polluted_(1)" "Gas_(1)" "Air_(2)"
#> [6] "Car_(2)" "Polluted_(2)" "Gas_(2)" "Air_(3)" "Car_(3)"
#> [11] "Polluted_(3)" "Gas_(3)" "Air_(4)" "Car_(4)" "Polluted_(4)"
#> [16] "Gas_(4)" "Air_(5)" "Car_(5)" "Polluted_(5)" "Gas_(5)"
#> [21] "Air_(6)" "Car_(6)" "Polluted_(6)" "Gas_(6)"
创建于 2023-07-17,使用 reprex v2.0.2
这假设总是有两位数字,第一个数字代表类别,第二个数字代表某种值。
使用
stringr
,您可以向 str_replace()
提供一个函数来替换第一个数字的匹配。
library(stringr)
str_replace(vector, "^.",
~ c('3'= 'Air_', '4'= 'Car_', '5'= 'Polluted_', '6'= 'Gas_')[.x])
# [1] "Air_1" "Car_1" "Polluted_1" "Gas_1" "Air_2" "Car_2"
# [7] "Polluted_2" "Gas_2" "Air_3" "Car_3" "Polluted_3" "Gas_3"
# [13] "Air_4" "Car_4" "Polluted_4" "Gas_4" "Air_5" "Car_5"
# [19] "Polluted_5" "Gas_5" "Air_6" "Car_6" "Polluted_6" "Gas_6"
尝试像这样
paste0
> paste0(c("Air", "Car", "Polluted", "Gas")[vector %/% 10 - 2], "_", vector %% 10)
[1] "Air_1" "Car_1" "Polluted_1" "Gas_1" "Air_2"
[6] "Car_2" "Polluted_2" "Gas_2" "Air_3" "Car_3"
[11] "Polluted_3" "Gas_3" "Air_4" "Car_4" "Polluted_4"
[16] "Gas_4" "Air_5" "Car_5" "Polluted_5" "Gas_5"
[21] "Air_6" "Car_6" "Polluted_6" "Gas_6"