题
我试图在“”上拆分一个字符串。并在“。”之前和之后使用两个字符串创建其他列。
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
版本应该有效。但是我认为这应该很容易:-)
问候,// m
解决方案
这应该解决问题
R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2)
[1] "abc" "di" "lik"
其他提示
与 stringr
包装更容易:
library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]
这与RCS的答案相同,但可能更容易理解:
> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]])
[1] "abc" "di" "lik"
这个问题在Stackoverflow上几次出现。
按照您的精确形式:
- 选择的第一个元素
strsplit
- 选择第二个元素按空间分开
- 选择第二个元素通过点分开 我建议通过以几种方式查看这个问题。
这个主题中的一些类似问题:
如果您关心速度,那么您应该考虑 约翰回答的提示 fixed
参数为 strsplit
.
另外,如果同时添加两个列,则可以节省自己的工作量:
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"))))
不隶属于 StackOverflow