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

War es hilfreich?

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:

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"))))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top