Ich habe eine Spalte in meinem Datenrahmen, die ich in mehrere Spalten mit dem Trennzeichen "_" teilen muss. Ich muss jedoch nur die letzten zwei Spalten aus der Ausgabe (die immer die Daten enthalten, die ich brauche) in jeder Zeile beibehalten. In vielen Datensätzen ist die Anzahl der Trennzeichen unterschiedlich, was zu einer anderen Anzahl von Spalten führt, wenn sie geteilt werden. Wie bekomme ich nur die letzten zwei Spalten jeder Beobachtung? Die folgenden sind Beispiele für einige der AufzeichnungenAufteilen unregelmäßiger Spalten in 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
Ich versuche, eine Ausgabe so etwas wie zu bekommen:
tagid$C1 tagid$C2
0986 114100005288
0900 226000013189
0900 226000
etc.... etc....
Meine Lösung hat einige Probleme, dh es gibt zwei Reihen mit 57k Spalten und ihre etwas langsam, jemand eine bessere Lösung als:
> 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
Tolle Idee regex, Art und Weise einfacher! Definitiv gearbeitet – sc73