2017-01-05 13 views
2

私は、2012年から600.000の科学論文と2014年の600.000のデータセットを持っています。引用分析などの分析単位として記事のカップル(2014-2012)を使用します。カラム値に基づく条件付きサンプリング

引用リンクがある記事のリスト(2014年から2012年まで)があります.2014年の読者が2012年の読者(Cit = 1)を引用するたびに、その2014年の文書では引用されていないが、元の文書と同じ雑誌に由来するもう1つの2012年の文書である。

玩具例:

Citing <- data.frame(T2012=c("DOI1", "DOI2", "DOI3"), 
        S2014=c("DOIa", "DOIb", "DOIc"), 
        journal2012=c("Nature", "Science", "JoE"), 
        cit=c(1,1,1)) 


Docs2012 <- data.frame(T2012=c("DOI1", "DOI2", "DOI3", "DOI4", "DOI5", "DOI6", 
           "DOI7", "DOI8", "DOI9", "DOI10", "DOI11", "DOI12", 
           "DOI13"), 
         Journal=c("Nature", "Science", "JoE", "Nature", "Nature", 
           "JoE", "Science", "JoE", "Nature", "Science", 
           "Science", "JoE", "Science")) 

...今私はS2014と同じままjournal2012は、Citを= 0とT2012は同じからランダムDOIである各Citを= 1、のための3行を追加したいですジャーナルはCit = 1の場合と同じです。私はT2012を描画するために複雑なループを試みましたが、データセットのサイズを考えると数日かかるでしょう。これは私がで終わるしたいものです。

Citing_withcontrol <- data.frame(T2012=c("DOI1", "DOI5", "DOI4", "DOI9", "DOI2", 
             "DOI13", "DOI7", "DOI11", "DOI3", "DOI8", 
             "DOI6", "DOI12"), 
           S2014=c("DOIa", "DOIa", "DOIa", "DOIa", 
             "DOIb", "DOIb", "DOIb", "DOIb", 
             "DOIc", "DOIc", "DOIc", "DOIc"), 
           journal2012=c("Nature", "Nature", "Nature", 
               "Nature", "Science", "Science", 
               "Science", "Science", "JoE", "JoE", 
               "JoE", "JoE"), 
           cit=c(1,0,0,0,1,0,0,0,1,0,0,0)) 

ヘルプを大幅にdplyrを使用して

答えて

1

ひとつのアイデア、

library(dplyr) 
merge(Docs2012 ,Citing, by.x = c('T2012', 'Journal'), by.y = c('T2012', 'journal2012'), all = TRUE)%>% 
    arrange(Journal, S2014) %>% 
    group_by(Journal) %>% 
    mutate(S2014 = zoo::na.locf(S2014), cit = replace(cit, is.na(cit), 0)) %>% 
    sample_n(4) %>% 
    arrange(S2014, Journal, desc(cit)) %>% 
    ungroup() 

# A tibble: 12 × 4 
# T2012 S2014 Journal cit 
# <fctr> <fctr> <fctr> <dbl> 
#1 DOI1 DOIa Nature  1 
#2 DOI4 DOIa Nature  0 
#3 DOI5 DOIa Nature  0 
#4 DOI9 DOIa Nature  0 
#5 DOI2 DOIb Science  1 
#6 DOI10 DOIb Science  0 
#7 DOI7 DOIb Science  0 
#8 DOI11 DOIb Science  0 
#9 DOI3 DOIc  JoE  1 
#10 DOI12 DOIc  JoE  0 
#11 DOI6 DOIc  JoE  0 
#12 DOI8 DOIc  JoE  0 

説明

最初
  • 私たちをいただければ幸いですmerge列上の2つのデータフレームT2012 & Journal/journal2012
  • 我々はJournal & S2014group_byジャーナル上の結果のデータフレームを並べ替えます。
  • S2014変数に最新の非NA値(zoo::na.locfを使用)を指定し、NA0に置き換えます(cit変数)。私たちは、所望の出力
を得るために私達のサンプル(あなたのケースでは4)
  • 我々arrangeungroupを取るためにsample_nを使用
  • 関連する問題