如何使用dplyr重命名字符串向量?

如何使用dplyr重命名字符串向量?,r,dplyr,R,Dplyr,我有一个数据帧,我想在打印前调整一个字符向量。我的数据框是140000多行,大约40个标签表示一个位置——在本例中是悉尼的一个地方政府区域。目前,“LGA_NAME11”列中的每个名称后面都有一个a或C,表示它们所在的地方政府区域的类型。我想去掉括号 我目前正在使用ifelse语句将当前值替换为附加值。称之为次优是轻描淡写的。我一直在为每种变体写一份声明 sydneyMapData <- sydneyMapData %>% mutate(LGA_NAME11 =

我有一个数据帧,我想在打印前调整一个字符向量。我的数据框是140000多行,大约40个标签表示一个位置——在本例中是悉尼的一个地方政府区域。目前,“LGA_NAME11”列中的每个名称后面都有一个a或C,表示它们所在的地方政府区域的类型。我想去掉括号

我目前正在使用ifelse语句将当前值替换为附加值。称之为次优是轻描淡写的。我一直在为每种变体写一份声明

sydneyMapData <- sydneyMapData %>%
    mutate(LGA_NAME11 =
            ifelse(LGA_NAME11 == "Ashfield (A)", "Ashfield",
            ifelse(LGA_NAME11 == "Auburn (C)", "Auburn",
            ifelse(LGA_NAME11 == "Bankstown (C)", "Bankstown",
            1))))
            etc...
我还在一个更大的数据集上重复这个练习,当我有>50条ifelse语句时,R似乎不喜欢它

我有兴趣尝试找到一个更简单的dplyr解决方案,主要是因为我喜欢dplyr。。。这将改善我在其他地方的工作流程。我忍不住认为这应该是可能的。万一我错了,我愿意接受任何建议!提前谢谢

您可以使用sub

使现代化 根据提供的数据,以下代码有效

sydneyMapData$LGA_NAME11[c(3,8)] <- 'Other'
res <- extract(sydneyMapData, LGA_NAME11, 
                       into='LGA_NAME11', '([^\\( ]+)')
head(res$LGA_NAME11)
#[1] "Ashfield" "Ashfield" "Other"    "Ashfield" "Ashfield" "Ashfield"
数据 你可以用潜水艇

使现代化 根据提供的数据,以下代码有效

sydneyMapData$LGA_NAME11[c(3,8)] <- 'Other'
res <- extract(sydneyMapData, LGA_NAME11, 
                       into='LGA_NAME11', '([^\\( ]+)')
head(res$LGA_NAME11)
#[1] "Ashfield" "Ashfield" "Other"    "Ashfield" "Ashfield" "Ashfield"
数据 如果你想要一个dplyr解决方案,那么mutate不是最简单的吗

如果你只是想摆脱的'和一切在他们

sub("\\s*\\(.*\\)$","","Ashfield (A)") # returns "Ashfield"
如果要将“s”中的地方政府类型作为单独变量保留:

sub("^.*\\((.*)\\)$","\\1","Ashfield (A)")   # returns "A"
因此

如果你想要一个dplyr解决方案,那么mutate不是最简单的吗

如果你只是想摆脱的'和一切在他们

sub("\\s*\\(.*\\)$","","Ashfield (A)") # returns "Ashfield"
如果要将“s”中的地方政府类型作为单独变量保留:

sub("^.*\\((.*)\\)$","\\1","Ashfield (A)")   # returns "A"
因此


非常感谢你令人难以置信的回答。我真的很感激。我最终在我的最终代码中使用了tidyr和sub的组合。您是否知道是否有一种方法可以修改tidyr解决方案,使其在遇到没有“a”的行时不会抛出错误。我问这个问题的原因是,我的最后一行有一个标签“Other”,它没有括号可以去掉,而且extract不喜欢它@复仇女神我更新了提取方法。我认为如果出现这样的问题,其他解决方案会更快更容易解决。非常感谢@akrun!非常感谢你令人难以置信的回答。我真的很感激。我最终在我的最终代码中使用了tidyr和sub的组合。您是否知道是否有一种方法可以修改tidyr解决方案,使其在遇到没有“a”的行时不会抛出错误。我问这个问题的原因是,我的最后一行有一个标签“Other”,它没有括号可以去掉,而且extract不喜欢它@复仇女神我更新了提取方法。我认为如果出现这样的问题,其他解决方案会更快更容易解决。非常感谢@akrun!
sub("\\s*\\(.*\\)$","","Ashfield (A)") # returns "Ashfield"
sub("^.*\\((.*)\\)$","\\1","Ashfield (A)")   # returns "A"
sydneyMapData %>% 
     mutate(local_govt_type = sub("^.*\\((.*)\\)$","\\1",LGA_NAME11),
            LGA_NAME11 = sub("\\s*\\(.*\\)$","", LGA_NAME11) ) -> sydneyMapData