行strsplit rowwise

Mis*_*sha 15 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])
Run Code Online (Sandbox Code Playgroud)

我想h$prim包含"abc","di","lik"..但是我无法弄明白.我猜strsplit不是矢量化,但后来我认为该sapply版本应该有效.但是我认为应该很容易:-)

问候,// M

rcs*_*rcs 30

这应该可以解决问题

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

  • @Misha:关于strsplit的一个棘手的事情是它返回一个列表."[["是从该列表中提取的函数.2是该函数的参数,这意味着它采用strsplit返回的列表的第二个元素.另见?"[和"在R.和thx @rcs,这很聪明! (5认同)
  • 它是一个索引运算符."[["可用于选择丢弃名称的单个元素,请参阅`?Extract`.你也可以用"[". (2认同)

had*_*ley 9

随着stringr包裹,它更容易:

library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]
Run Code Online (Sandbox Code Playgroud)


Jos*_*ich 7

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

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


Mar*_*rek 7

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

以您的确切形式:

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

如果你关心速度,那么你应该考虑从John回答有关fixed参数的提示strsplit.