2
У меня есть таблица данных, как этотВставить несколько элементов из списка векторов
ID Name
1: 2760925 01_HOOFD_010
2: 2760925 01_HOOFD_015
3: 2771451 01_HOOFD_010
4: 2771451 01_HOOFD_190_2
5: 2771451 01_HOOFD_030_2
6: 2771451 08_AWB45_020_2
7: 2771451 08_AWB45_040
8: 2771451 01_HOOFD_065_2
Для поля «Имя», я хочу, чтобы иметь часть после второго подчеркиванием в отдельной колонке data.table. В настоящее время я использую strplit с «_», как знак, но моя проблема заключается в том, что некоторые записи имеют 3 элемента, а также некоторые другие 4. Мое текущее решение
DT$code_3<-DT[,.(lapply(strsplit(Name,"_"),"[",3:4)),][,.(lapply(V1,function(x) paste(na.omit(x),collapse="_"))),]
, но я сомневаюсь, что это самый факт/кратчайший путь ... У вас есть идеи? Спасибо
> dput(DT)
structure(list(ID = c(2760925L, 2760925L, 2771451L, 2771451L,
2771451L, 2771451L, 2771451L, 2771451L), Name = c("01_HOOFD_010",
"01_HOOFD_015", "01_HOOFD_010", "01_HOOFD_190_2", "01_HOOFD_030_2",
"08_AWB45_020_2", "08_AWB45_040", "01_HOOFD_065_2")), .Names = c("ID",
"Name"), row.names = c(NA, -8L), class = c("data.table", "data.frame"
), .internal.selfref = <pointer: 0x103819178>)
Спасибо @Anthony, быстрый и лаконичный понравился я спросил ... – User800701
Другая версия 'суб ('([^ _] + _) {2}', '', х $ Name) 'или синтаксис' data.table' будет 'x [, two: = sub ('([^ _] + _) {2}', '', Name)]' – akrun