私はSQLで多く使用した動きを複製しようとしていますが、Rで同等のものを見つけることはできません。リストや他の情報源では低いが、私が探しているものは見つからない。R:データフレームの列内の特定の文字の位置を確認
"Doe、John"のようなフルネームの変数を持つデータフレームがあります。
# creates a split name matrix for each record
namesplit <- strsplit(crm$DEF_NAME, ',')
# takes the first/left part of matrix, after the comma
crm$LAST_NAME <- trimws(sapply(namesplit, function(x) x[1]))
# takes the last/right part of the matrix, after the comma
crm$FIRST_NAME <- trimws(sapply(namesplit, function(x) x[length(x)]))
しかし、名前のいくつかは持っている:私は、次のコードを使用してこれらの名前を分割することができました「」 "、"の代わりに名前を分割します。たとえば、 "Doe。John"などです。他の場合には、私は2つの "。"すなわち "Doe。John T."を持っています。ここに例があります:
> test$LAST_NAME
[1] "DEWITT. B" "TAOY. PETER" "ZULLO. JASON"
[4] "LAWLOR. JOSEPH" "CRAWFORD. ADAM" "HILL. ROBERT W."
[7] "TAGERT. CHRISTOPHER" "ROSEBERY. SCOTT W." "PAYNE. ALBERT"
[10] "BUNTZ. BRIAN JOHN" "COLON. PERFECTO GAUD" "DIAZ. JOSE CANO"
[13] "COLON. ERIK D." "COLON. ERIK D." "MARTINEZ. DAVID C."
[16] "DRISKELL. JASON" "JOHNSON. ALEXANDER" "JACKSON. RONNIE WAYNE"
[19] "SIPE. DAVID J." "FRANCO. BRANDT" "FRANCO. BRANDT"
この場合、最初の "。"の位置を探しています。私はユーザー定義関数を使って名前を分割することができます。ここにその機能があります。
left = function (string,char){
substr(string,1,char)}
right = function (string, char){
substr(string,nchar(string)-(char-1),nchar(string))}
私は、次のといくつかの成功を収めてきましたが、それはむしろ、行ごとに変更するよりも、すべてのレコードの位置6をつかむだろう例えばので、それは、最初のレコードのみの位置をとります。
test$LAST_NAME2 <- left(test$LAST_NAME,
which(strsplit(test$LAST_NAME, '')[[1]]=='.')-1)
私はとsapply適用し、周りにプレイしましたが、彼らが動作していないようですので、私は明らかに何かが欠けています。
ifelse関数を使用して "。"を適用することを計画していました。この問題が発生しているレコードを解析します。
私は答えが簡単であることを恐れる。しかし、私は立ち往生しています。助けてくれてありがとう。
ただ、例えば、strsplit' 'に正規表現を渡します'strsplit(c( 'hello.world'、 'hello、world')、 '\\。|、')'です。また、 'tidyr :: separate'をチェックすることもできます。 – alistaire
うわー。私はそれを試みたが、 "。" "\\"とします。本当にありがとうございました。 –
私は賢明なことは、コンマで区切る必要があるすべてのドットを 'gsub( '\\ w \\ w [。](。)'、 '\\ 1、\\ 2 '、crm $ DEF_NAME) 'を実行し、' strsplit'を実行します。 –