加入并合并两个没有多重性的数据帧

时间:2015-03-04 11:42:01

标签: r join merge

我知道标题真的很混乱,但我必须解释我的问题。 我有2个数据集,其中第一个包含由pmid表示的每篇文章的引用频率。它看起来像这样:

       pmid year freq
1  14561399 2011    1
2  14561399 2012    3
3  18511332 2010    1
4  21193046 2012    2
5  21193046 2013    2
6  14561399 2013    1
7  18511332 2011    1
8  18511332 2012    3
9  14561399 2014    1
10 16533158 2013    2

,第二个包含文章功能,如下所示:

      pmid title_char title_wrds
1 20711763         75          9
2 20734175        109         12
3 20058113         93         13
4 20625865        142         17
5 20517661        103         12
6 20195930        128         16

您可以看到的两个数据集都包含" pmid",这是我需要"合并"或者"加入"这个数据集。这不是问题,只需使用merge()函数或使用dplyr包即可。但是当我这样做时,结果看起来像这样:

   pmid title_char title_wrds year freq
1   184         77         10 2010    1
2   406        142         20 2008    1
3   407        110         16 2008    1
4   407        110         16 2003    1
5   408         79         10 1998    1
6   450         58          7 2012    2
7   450         58          7 2009    1

我的问题是 - 正如你可以看到的例如第2行和第3行 - 这两行包含相同的文章(相同的pmid,相同的特征)但由于引用年份它在两行中。

    pmid title_char title_wrds year freq
 3   407        110         16 2008    1
 4   407        110         16 2003    1

我想要这样的事情:

    pmid title_char title_wrds year2008Freq year2003Freq
 1   407        110         16            1            1

每1篇文章就是1行。

1 个答案:

答案 0 :(得分:0)

你可以尝试

library(reshape2)
res <- dcast(dfN, ...~paste0('year', year, 'Freq'), value.var='freq')

数据

dfN <- structure(list(pmid = c(184L, 406L, 407L, 407L, 408L, 450L, 450L
 ), title_char = c(77L, 142L, 110L, 110L, 79L, 58L, 58L),
 title_wrds = c(10L, 
 20L, 16L, 16L, 10L, 7L, 7L), year = c(2010L, 2008L, 2008L, 2003L, 
 1998L, 2012L, 2009L), freq = c(1L, 1L, 1L, 1L, 1L, 2L, 1L)),
 .Names = c("pmid", 
 "title_char", "title_wrds", "year", "freq"), class = "data.frame",
 row.names = c("1", "2", "3", "4", "5", "6", "7"))