RePEcデータベースのIDを持つ2つのデータフレームがあります。
1つのデータフレームに、約3,000のIDと数値のリストがあります。次のようになります。
df1$repec_id <- c("RePEc:eee:ecolet:v:173:y:2018:i:c:p:65-68", "RePEc:eee:moneco:v:103:y:2019:i:c:p:105-122", "RePEc:ess:wpaper:id:6872")
df1$numbers <- c("1.4", "3.5", "4.9)
次に、df1のIDと作成者名を含むさらに多くのID(約150,000)を持つ別のデータフレームがあります。次のようになります。
df2$repec_id <- c("RePEc:eee:ecolet:v:173:y:2018:i:c:p:65-68", "RePEc:eee:moneco:v:103:y:2019:i:c:p:105-122", "RePEc:ess:wpaper:id:6872", "RePEc:sgc:wpaper:id:2926")
df2$authors <- c("Smith, John; Hope, Gill", "Robinson, Jill", "Chu, James", "Ravendran, Vikram")
df2$year <- c("2019", "2020", "2018", "2017)
各IDに関連付けられている作成者の姓と発行年をdf1にプルし、new_IDs
そこに新しい列を作成して、最終的な出力が次のようになるようにします。
df1$repec_id <- c("RePEc:eee:ecolet:v:173:y:2018:i:c:p:65-68", "RePEc:eee:moneco:v:103:y:2019:i:c:p:105-122", "RePEc:ess:wpaper:id:6872")
df1$numbers <- c("1.4", "3.5", "4.9)
df1$new_id <- c("Smith and Hope 2019", "Robinson 2020", "Chu 2018")
誰かが私がこれを行う方法を知っていますか?よろしくお願いします!
aを実行してleft_join
から、前の単語を抽出し、,
「year」を貼り付けることができます。
library(dplyr)
library(purrr)
library(stringr)
df1 %>%
left_join(df2) %>%
mutate(new_id = str_c(map(str_extract_all(authors, "\\w+(?=,)"),
str_c, collapse = ' and '), year, sep=" ")) %>%
select(-authors, -year)
# repec_id numbers new_id
#1 RePEc:eee:ecolet:v:173:y:2018:i:c:p:65-68 1.4 Smith and Hope 2019
#2 RePEc:eee:moneco:v:103:y:2019:i:c:p:105-122 3.5 Robinson 2020
#3 RePEc:ess:wpaper:id:6872 4.9 Chu 2018
または、抽出する代わりに、 str_remove
df1 %>%
left_join(df2) %>%
transmute(repec_id, numbers,
new_id = str_c(str_remove_all(authors, ',\\s*\\w+(?:;|$)'), year, sep=' '))
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加