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

10
我是一个数据帧,对于特定的列,我想要去掉下划线后面的所有内容。
因此:
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
test %>% mutate(label = gsub('_[^_]*$', '', label)) - alistaire
2个回答

16

我们可以使用sub来完成这项任务,而不需要任何外部包。

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

5
这也可以工作:
gsub('(.*)_\\w+', '\\1', test$label)
#[1] "test_test"   "test_tom"    "tset_eat"    "tisk - tisk"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接