私は文字列の列、数字の後に " - "を付けた後に月の年のデータフレームを持っています。私は月と年を得るために文字列を解析しようとしています。 「 - 」の文字が非常に最初のステップとして、私はこれの位置を示して新しい列を作成するには()を変異:: dplyrを使用して文字列内の文字の位置を見つけるためにdplyr mutateを使用しています
regexpr()
regexpr("-",yearid)[1]
。しかし、regexpr()は、mutate()内で別々に使用される場合とは大きく異なる動作をするようです。文字列によっては更新されないようですが、前の行から文字列位置を引き継ぎます。以下の例では、 " - "文字の位置がそれぞれの年齢の4,4,5であると期待しています。しかし、私は4,4,4を得ます - したがって、この4は正しくありません。私が別々にregexprを実行すると、この問題は表示されません。
私は何かが不足していると思いますが、yearidの各値に固有の位置を動的に " - "得る方法はありますか? 1月を取得する簡単な方法があること、そして1997年5月、私は出力を得るようregExprの使用一方
yearid <- c("50 - January 1995","51 - January 1996","100 - January 1997")
data.df <- data.frame(yearid)
data.df <- mutate(data.df, trimpos = regexpr("-",str_trim(yearid))[1],
pos = regexpr("-",yearid)[1])
> data.df
yearid test1 test2
1 50 - January 1995 4 4
2 51 - January 1996 4 4
3 100 - January 1997 4 4
期待通り:
> regexpr("-",yearid[1])[1]
[1] 4
> regexpr("-",yearid[2])[1]
[1] 4
> regexpr("-",yearid[3])[1]
[1] 5
は最後に、私は私のSessionInfo(持っています)stringr
ライブラリからregexpr
関数はmatch.length
取り付けられた2つの追加属性と位置のベクトルを返す
R version 3.1.1 (2014-07-10)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] stringr_1.0.0 dplyr_0.4.1 readr_0.2.2.9000
loaded via a namespace (and not attached):
[1] assertthat_0.1 DBI_0.3.1 knitr_1.10.5 lazyeval_0.1.10.9000 magrittr_1.5 parallel_3.1.1
[7] Rcpp_0.11.6 stringi_0.4-1 tools_3.1.1
ちょうどあなたの 'mutate'式から' [1] 'sのドロップします。 – nrussell
グループ化がなく、 'regexpr()'がベクトル化されていない場合、dplyrを使用するのは無意味です。 –
@nrussellありがとうございました - もしそれが助けになるならば、私が気づいた問題を引き起こしたのはregexprのアイデア[1]でしたか?ちょうど根本的な問題も確実にしたかったのです。 – rajvijay