将字符串分成两列

美国空军

我正在使用其他人的数据,其列的可能值为“短”和“长”。不幸的是,数据创建者还在这些词之后添加了字母和问号来注释某些事情,我想将它们分解为单独的列。以下是一些可使用的伪造数据:

vars <- c('long','short','longG','short?','short?F','long?G')
species <- c('sp1','sp2','sp3','sp4','sp5','sp6')
testdf <- cbind(vars, species)

我想将vars列拆分为实际值longshort,然后将新列仅包含带注释的字符。我可以使用以下命令中途到达,它可以正确地产生一个仅包含注释字符的新列:

testdf %>% mutate(notes = gsub('long|short',"",vars)

但是我不知道如何拆分或子集化,var这样我得到的列只是说shortlong

预先感谢您的帮助,SO社区!^ _ ^

格雷戈尔·托马斯(Gregor Thomas)

baseR中提取字符串很困难。改为使用stringr

library(stringr)
str_extract(vars, 'long|short')
# [1] "long"  "short" "long"  "short" "short" "long" 

(您可以在mutate其他地方使用它。)


所以是您完整的示例(我将对模式进行参数化以取得很好的效果)

pattern = "long|short"
mutate(testdf,
   notes = gsub(pattern, "", vars),
   notes2 = str_replace(vars, pattern, ""), # stringr alternative for consistent syntax
   ls = str_extract(vars, pattern))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章