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