【问题标题】:Joining and merging two dataframes with no multiplicity加入和合并两个没有多重性的数据帧
【发布时间】:2015-05-05 09:18:02
【问题描述】:

我知道标题确实令人困惑,但我必须解释我的问题。 我有 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 行。

【问题讨论】:

  • reshape(dfN, idvar=c('pmid', 'title_char', 'title_wrds'), timevar='year', direction='wide') 有帮助吗?或使用library(reshape2); dcast(dfN, ...~year, value.var='freq')
  • 问题已解决,谢谢!

标签: r join merge


【解决方案1】:

你可以试试

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"))

【讨论】:

    猜你喜欢
    • 2012-07-23
    • 2019-03-05
    • 2021-11-20
    • 1970-01-01
    • 2022-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    相关资源
    最近更新 更多