У меня есть столбец в моем фрейме данных, который мне нужно разбить на несколько столбцов, используя разделитель «_». Однако мне нужно сохранить только последние два столбца из вывода (который всегда будет содержать нужные мне данные) в каждой строке. Во многих записях количество разделителей различно, поэтому в результате разного количества столбцов. Как получить только последние два столбца каждого наблюдения. Ниже приведены примеры некоторых из записейРазделение нерегулярных столбцов в r
unique(data$tagid.1)
[1] tag id 00000_0_0900_226000013189
[3] 00000_0_0986_114100005288 00000_0_0900_226000132078
[5] 00000_0_09LA_00000_0_0900_226000 00000_0_0900_226000131998
[7] 0000_2004000000000847 00000_0_0900_22600001\a\0048\022LI
[9] 00000_0_0900_226000013189I 00000_0_0986_114100006473
Я пытаюсь получить выход что-то вроде:
tagid$C1 tagid$C2
0986 114100005288
0900 226000013189
0900 226000
etc.... etc....
Мое решение имеет некоторые проблемы, то она выводит две строки с 57k столбцами и его вид медленной, кого есть лучшее решение, чем:
> data.tag <- as.data.frame(data$tagid.1)
> tag1 <- cSplit(data.tag,"data$tagid.1",sep="_")
>
> head(tag1)
data$tagid.1_1 data$tagid.1_2 data$tagid.1_3 data$tagid.1_4 data$tagid.1_5 data$tagid.1_6 data$tagid.1_7
1: tag id NA NA NA NA NA NA
2: 00000 0 0900 226000013189 NA NA NA
3: 00000 0 0900 226000013189 NA NA NA
4: 00000 0 0900 226000013189 NA NA NA
5: 00000 0 0900 226000013189 NA NA NA
6: 00000 0 0900 226000013189 NA NA NA
>
> lastValue <- function(x) tail(x[!is.na(x)], 2)
> tag2 <- as.data.frame(apply(tag1, 1, lastValue))
> dim(tag2)
[1] 2 56997
Отличная идея с использованием регулярных выражений, способ проще! Определенно работает – sc73