質問
文字列を「」に分割しようとしています。 「。」の前後に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
解決
これはトリックをするはずです
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
- 空間ごとに分離された2番目の要素を選択します
- 2番目の要素を選択して、DOTで分離します この質問は、それを達成できる方法を確認することをお勧めします。
このトピックにおけるいくつかの同様の質問:
そして、あなたが速度を気にかけているなら、あなたは考慮すべきです ジョンの答えについてのヒントについて fixed
パラメーターに strsplit
.
または、両方の列を同時に追加すると、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"))))
所属していません StackOverflow