删除R中列的最后一个下划线后的所有内容

时间:2016-11-29 04:14:00

标签: r regex dplyr

我有一个数据框,对于特定的列,我想在最后一个下划线之后删除所有内容。

所以:

test <- data.frame(label=c('test_test_test', 'test_tom_cat', 'tset_eat_food', 'tisk - tisk'), 
                   stuff=c('blah', 'blag', 'gah', 'nah') , 
                   numbers=c(1,2,3, 4))

应该成为

result <- data.frame(label=c('test_test', 'test_tom', 'tset_eat', 'tisk - tisk'), 
                   stuff=c('blah', 'blag', 'gah', 'nah') , 
                   numbers=c(1,2,3, 4))

我有:

require(dplyr)
test %>%
  mutate(label = gsub('_.*','',label))

但这会从第一个下划线中删除所有内容并给我

 wrong_result <- data.frame(label=c('test', 'test', 'tset', 'tisk - tisk'), 
                   stuff=c('blah', 'blag', 'gah', 'nah') , 
                   numbers=c(1,2,3, 4))

2 个答案:

答案 0 :(得分:5)

我们可以使用sub,这可以在没有任何外部包的情况下完成

test$label <- sub("_[^_]+$", "", test$label)
test$label
#[1] "test_test"   "test_tom"    "tset_eat"    "tisk - tisk"

答案 1 :(得分:1)

这也有效:

gsub('(.*)_\\w+', '\\1', test$label)
#[1] "test_test"   "test_tom"    "tset_eat"    "tisk - tisk"