我需要标准化如何在数据集中引用子组。要做到这一点,我需要确定变量何时匹配几个字符串中的一个,然后设置一个具有标准化名称的新变量。我试着这样做:
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 = ".*_"
来替换最后一个下划线之前的所有内容。或者是别的什么……希望这些想法能给你一个好的开始。