我有一个数据集,其中的年龄被编码为值1-9,但是,当我做一些名称连接在一起时,我想交换定义。我想这和我想要做的定义中的"-“字有关。我需要做什么,以使字符不会产生意外的返回,因为在其他情况下,我试图用包含"/“的定义替换代码。
简单例子
library(tidyverse)
df.1 <- data.frame(age = round(runif(n = 50, 1, 9),0))
age.pattern <- as.data.frame(cbind(value = 1:9, key = c("0-2",
"3-9",
"10-19",
"20-39",
"40-59",
"60-64",
"65-74",
"75-84",
"85+")),
stringsAsFactors = F)
df.2 <- df.1 %>%
mutate(patient_age = str_replace_all(age,
setNames(age.pattern$key,
age.pattern$value)))
unique(df.2$patient_age)
[1] "75-84" "20-385+" "10-185+"
[4] "10-185+-85+" "60-64" "65-74"
[7] "0-10-185+-85+" "85+" "40-585+"
发布于 2020-09-23 22:12:23
str_replace_all
可能存在与regex
模式相关的问题。一个更简单的选项是使用命名向量的base R
来匹配和替换
df.1$patient_age <- setNames(age.pattern$key,
age.pattern$value)[as.character(df.1$age)]
发布于 2020-09-24 04:22:03
因为您想在这里进行精确的匹配,所以我们可以使用match
:
head(df.1$age, 10)
#[1] 6 3 7 1 4 9 8 3 5 4
head(age.pattern$key[match(df.1$age, age.pattern$value)], 10)
#[1] "60-64" "10-19" "65-74" "0-2" "20-39" "85+" "75-84" "10-19" "40-59" "20-39"
https://stackoverflow.com/questions/64036708
复制相似问题