2016-11-29 48 views
2

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

所以:

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)) 
+0

'测试%>%变异(标签= GSUB('_ [^ _ ] * $','',label))' – alistaire

回答

3

我们可以使用sub,这可以无需任何外部包装进行

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

这也将工作:

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