Frage
Im Versuch, eine Zeichenfolge auf aufzuspalten „“ und schafft zusätzliche Spalten mit den zwei Saiten vor und nach dem „“.
tes<-c("1.abc","2.di","3.lik")
dat<-c(5,3,2)
h<-data.frame(tes,dat)
h$num<-substr(h$tes,1,1)
h$prim<-unlist(strsplit(as.character(h$tes),"\\."))[2]
h$prim<-sapply(h$tes,unlist(strsplit(as.character(h$tes),"\\."))[2])
Id wie h$prim
enthält „abc“, „di“, „lik“ .. aber ich bin nicht in der Lage, es herauszufinden. Ich denke, strsplit
nicht vektorisiert ist, aber dann dachte ich, die sapply
Version gearbeitet haben soll. Allerdings gehe ich davon aus es sollte einfach sein: -)
Viele Grüße, // M
Lösung
Dies sollte den Trick
R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2)
[1] "abc" "di" "lik"
Andere Tipps
Mit dem stringr
Paket ist es noch einfacher:
library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]
Dies ist die gleiche wie rcs' Antwort, kann aber leichter zu verstehen:
> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]])
[1] "abc" "di" "lik"
Diese Frage erscheint mehrmals auf Stackoverflow.
In genaue Form, wie Sie folgende Aufgaben:
- Auswählen des ersten Elements von
strsplit
- Auswahl zweiten Element getrennt durch Leerzeichen
- Auswählen des zweiten Elements getrennt durch Punkt ich empfehle diese Frage zu sehen, wie viele Möglichkeiten es erreicht werden könnte.
Einige ähnliche Frage in diesem Thema:
Alternativ können Sie sich die Arbeit des Herausziehen des zweiten Elements speichern, wenn Sie beide Spalten gleichzeitig hinzuzufügen:
tes <- c("1.abc","2.di","3.lik")
dat <- c(5,3,2)
h <- data.frame(tes, dat, stringsAsFactors=FALSE)
values <- unlist(strsplit(h$tes, ".", fixed=TRUE))
h <- cbind(h, matrix(values, byrow=TRUE, ncol=2,
dimnames=list(NULL, c("num", "prim"))))