の文字列ベクトルI以下のベクトルを有する:分割R
tmp3 <- c("1500 2", "1500 1", "1510 2", "1510 1", "1520 2", "1520 1", "1530 2",
"1530 1", "1540 2", "1540 1")
私はそれを読み取ることになるので、ちょうど、このベクターの原子の各々の2番目の数を維持したい:
c(2,1,2,1,2,1,2,1,2,1)
の文字列ベクトルI以下のベクトルを有する:分割R
tmp3 <- c("1500 2", "1500 1", "1510 2", "1510 1", "1520 2", "1520 1", "1530 2",
"1530 1", "1540 2", "1540 1")
私はそれを読み取ることになるので、ちょうど、このベクターの原子の各々の2番目の数を維持したい:
c(2,1,2,1,2,1,2,1,2,1)
は、おそらくより良い方法はありますが、ここでstrsplit()
を持つ2つのアプローチです:
as.numeric(data.frame(strsplit(tmp3, " "))[2,])
as.numeric(lapply(strsplit(tmp3," "), function(x) x[2]))
as.numerは、文字を使用できるのであれば、ic()は必要ないかもしれません...
これは洗練されたソリューションです。ちょうど私が探していたもの。ありがとう! – Zak
私はあなたのソリューションを使用しようとしましたが、代わりにデータフレームの列を使用しましたが、すぐには機能しませんでした。私はそれらをリストにする必要がある場合に追加します。 'as.numeric(data.frame(strsplit(as。 – pedrosaurio
substr(x = tmp3, start = 6, stop = 6)
文字列が常に同じ長さであれば、このトリックを行う必要があります。
(そして、もちろん、あなたが引数名を指定する必要はありません - あまりにも、正常に動作しますsubstr(tmp3, 6, 6)
)
一つはtextConnection
にread.table
を使用することもできます。その後、
X <- read.table(textConnection(tmp3))
> str(X)
'data.frame': 10 obs. of 2 variables:
$ V1: int 1500 1500 1510 1510 1520 1520 1530 1530 1540 1540
$ V2: int 2 1 2 1 2 1 2 1 2 1
を
だから、X$V2
が必要です。
これそれを行う必要があります:あなたが数値ベクトルが必要な場合は、
library(plyr)
ldply(strsplit(tmp3, split = " "))[[2]]
私はこの
> res <- sapply(strsplit(tmp3, " "), "[[", 2)
の場合を行うための最もエレガントな方法だと思う何
as.numeric(ldply(strsplit(tmp3, split = " "))[[2]])
を使用あなたはそれを整数にする必要があります
> storage.mode(res) <- "integer"
また、 'res < - as.numeric(sapply(...))'も同様に動作します。 'storage.mode'は少し怖いです – user295691
2列に1列を分割する簡単な方法data.table
require(data.table)
data_ex = data.table(a = paste(sample(1:3, size=10, replace=TRUE),"-separate", sep=""))
data_ex[, number:= unlist(strsplit(x=a, split="-"))[[1]], by=a]
data_ex[, word:= unlist(strsplit(x=a, split="-"))[[2]], by=a ]
を経由してそれはあなたの実際のデータは、あなたが与えてくれた例のデータと一致するか密接に少し依存します。私あなたがちょうどあなたがgsub
を使用することができ、スペースの後にすべてを取得しようとしている:
gsub(".+\\s+", "", tmp3)
[1] "2" "1" "2" "1" "2" "1" "2" "1" "2" "1"
あなたが「宇宙の後にすべてを取る」よりも複雑なルールを実装しようとしている場合は、あなたが必要となりますより複雑な規則的な表現。
あなたはこれを説明できますか... – user3067923
関数' gsub'は正規表現のマッチを他のものに置き換えるためのものです。この場合、正規表現 '。+ \\ s +'を使用して、見つかった一致を空の文字列 '" "'で置き換えます。正規表現は「最初は何でもマッチしますが、スペースで終わらなければなりません」(文字スペースは '\\ s'と書かれています) –
もう1つのオプションはscan()
です。 2番目の値を取得するには、論理サブセットを使用できます。
scan(text = tmp3)[c(FALSE, TRUE)]
# [1] 2 1 2 1 2 1 2 1 2 1
質問を解決済みとしてマークする回答を受け入れることはできますか? – MERose