在特定数量的特殊字符后选择字符串的一部分

时间:2017-03-29 15:16:20

标签: r data.table

我有data.table

V1
a_b_c_las_poi 
a_b_c_kiosk_pran 
a_b_c_qwer_ok

我想在此data.table中添加一个新列,其中不包含“_”后面的字符串的最后一部分。

更新

所以我希望输出为

a_b_c_las a_b_c_kiosk a_b_c_qwer

2 个答案:

答案 0 :(得分:1)

您可以使用sub和正则表达式执行此操作。

sub("(.*)_.*", "\\1", V1)
[1] "a_b_c_las"   "a_b_c_kiosk" "a_b_c_qwer" 

答案 1 :(得分:1)

如果k是要保留的字段数:

k <- 2
DT[, V1 := do.call(paste, c(read.table(text=V1, fill=TRUE, sep="_")[1:k], sep = "_"))]
如果所有行具有相同数量的字段,则可以省略

fill=TRUE

注意: DT的可重现形式为:

library(data.table)

DF <- data.frame(V1 = c("a_b_c_las_poi", "a_b_c_kiosk_pran", "a_b_c_qwer_ok"),
   stringsAsFactors = FALSE)
DT <- as.data.table(DF)