quant
quant

Reputation: 4482

select part of a string after certain number of special character

I have a data.table with a column

V1
a_b_c_las_poi 
a_b_c_kiosk_pran 
a_b_c_qwer_ok

I would like to add a new column to this data.table which does not include the last part of string after the "_".

UPDATE

So i would like the output to be

a_b_c_las a_b_c_kiosk a_b_c_qwer

Upvotes: 0

Views: 59

Answers (2)

G. Grothendieck
G. Grothendieck

Reputation: 269481

If k is the number of fields to keep:

k <- 2
DT[, V1 := do.call(paste, c(read.table(text=V1, fill=TRUE, sep="_")[1:k], sep = "_"))]

fill=TRUE can be omitted if all rows have the same number of fields.

Note: DT in a reproducible form is:

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)

Upvotes: 1

G5W
G5W

Reputation: 37641

You can do this with sub and a regular expression.

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

Upvotes: 1

Related Questions