行strsplit rowwise

时间:2010-09-13 19:40:47

标签: r strsplit

我试图将字符串拆分为“。”并使用“。”之前和之后的两个字符串创建其他列。

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])

我希望h$prim包含“abc”,“di”,“lik”..但是我无法弄明白。我猜strsplit没有矢量化,但我认为sapply版本应该有效。但是我认为应该很容易: - )

此致 //中号

5 个答案:

答案 0 :(得分:30)

这应该可以解决问题

R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2)
[1] "abc" "di"  "lik"

答案 1 :(得分:9)

使用stringr套餐更容易:

library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]

答案 2 :(得分:7)

这与rcs的答案相同,但可能更容易理解:

> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]])
[1] "abc" "di"  "lik"

答案 3 :(得分:7)

这个问题在StackOverflow上出现过几次。

以您的确切形式:

本主题中的一些类似问题:

如果你关心速度,那么你应该考虑tip from John answer about fixed parameter to strsplit

答案 4 :(得分:1)

或者,如果您同时添加两个列,则可以省去拔出第二个元素的工作:

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"))))