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

Kil*_*ail 3 regex r 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))
Run Code Online (Sandbox Code Playgroud)

应该成为

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))
Run Code Online (Sandbox Code Playgroud)

我有:

require(dplyr)
test %>%
  mutate(label = gsub('_.*','',label))
Run Code Online (Sandbox Code Playgroud)

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

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

akr*_*run 5

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

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


San*_*Dey 5

这也将起作用:

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