17

「。」で文字列を分割しようとしています。「.」の前後に 2 つの文字列を含む追加の列を作成します。

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

4

5 に答える 5

32

これでうまくいくはずです

R> sapply(strsplit(as.character(h$tes), "\\."), "[[", 2)
[1] "abc" "di"  "lik"
于 2010-09-13T19:48:25.090 に答える
10

パッケージを使用すると、stringrさらに簡単になります。

library(stringr)
str_split_fixed(h$tes, fixed("."), 2)[, 2]
于 2010-09-13T21:25:19.077 に答える
8

これはrcsの答えと同じですが、理解しやすいかもしれません:

> sapply(strsplit(as.character(h$tes), "\\."), function(x) x[[2]])
[1] "abc" "di"  "lik"
于 2010-09-13T20:04:59.667 に答える
7

この質問はStackOverflowに何度か表示されます。

あなたとまったく同じ形で:

このトピックのいくつかの同様の質問:

また、速度が気になる場合は、パラメータに関するJohnの回答からのヒントfixedstrsplitを検討する必要があります。

于 2010-09-14T08:35:45.413 に答える
1

または、両方の列を同時に追加すると、2 番目の要素を引き出す作業を省くことができます。

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"))))
于 2010-09-15T04:49:30.240 に答える