Im trying to split a string on "." and create additional columns with the two strings before and after ".".
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])
I´d like h$prim
to contain "abc","di","lik"..However I´m not able to figure it out. I guess strsplit
is not vectorized, but then I thought the sapply
version should have worked. However I assume it should be easy:-)
Regards, //M
This should do the trick
R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2)
[1] "abc" "di" "lik"
With the stringr
package it's even easier:
library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]
This is the same as rcs' answer, but may be easier to understand:
> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]])
[1] "abc" "di" "lik"
This question appears several time on StackOverflow.
In exact form as yours:
strsplit
Some similar question in this topic:
And if you care about speed then you should consider tip from John answer about fixed
parameter to strsplit
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With