r语言 - 使用可能匹配的向量标准化组名



我需要标准化如何在数据集中引用子组。要做到这一点,我需要确定变量何时匹配几个字符串中的一个,然后设置一个具有标准化名称的新变量。我试着这样做:

df <- data.frame(a = c(1,2,3,4), b = c(depression_male, depression_female, depression_hsgrad, depression_collgrad))
TestVector <- "male"
for (i in TestVector) {
df$grpl <- grepl(paste0(i), df$b)
df[ which(df$grpl == TRUE),]$standard <- "male"
}

测试向量通常有多个元素。grepl工作(我打算稍后处理男性/女性匹配混淆,但我会对此提出建议),但子集和设置一个新变量没有。如果我能将grepl输出直接转换为标准的名称变量,那就更好了。

您唯一真正的问题是需要初始化standard列。但是我们可以稍微简化一下你的代码:

df <- data.frame(a = c(1,2,3,4), b = c("depression_male", "depression_female", "depression_hsgrad", "depression_collgrad"))
TestVector <- "male"
df$standard <- NA
for (i in TestVector) {
df[ grepl(i, df$b), "standard"] <- "male"
}
df
#   a                   b standard
# 1 1     depression_male     male
# 2 2   depression_female     male
# 3 3   depression_hsgrad     <NA>
# 4 4 depression_collgrad     <NA>

然后你就有了"男性"的问题。模式匹配"女性";。

也许你正在寻找sub代替?它的工作原理类似于find/replace:

df$standard = sub(pattern = "depression_", replacement = "", df$b)
df
#   a                   b standard
# 1 1     depression_male     male
# 2 2   depression_female   female
# 3 3   depression_hsgrad   hsgrad
# 4 4 depression_collgrad collgrad

如果没有更多的输入/输出对示例,很难概括出在您的情况下什么是最好的。如果你所有的数据都是&;depression &;;这将会很有效。或者可能标准名称总是在下划线之后,所以您可以使用pattern = ".*_"来替换最后一个下划线之前的所有内容。或者是别的什么……希望这些想法能给你一个好的开始。

相关内容

  • 没有找到相关文章

最新更新