【问题标题】:R - Similar records in different data framesR - 不同数据帧中的相似记录
【发布时间】:2016-03-02 18:57:32
【问题描述】:

我想要数据框中的每条记录,其中每条记录的前 3 个属性等于另一个数据框中记录的相同 3 个属性。

例如,我有:

   File, Paragraph, Sentence, E, ED
   1.txt, 1, 1, CM, C.M.
   1.txt, 1, 1, LF, L.F.
   1.txt, 2, 1, E, E.
   1.txt, 2, 1, M, M.
   1.txt, 4, 1, LF, L.F.
   1.txt, 4, 1, NM, N.M.
   1.txt, 6, 1, RN, R.N.
   1.txt, 7, 1, AO, A.O.

我的这个数据框有 3 个公共列,但行数更少。

   File Paragraph Sentence occurrences
   1.txt        1        1           2
   1.txt        2        1           2
   1.txt        4        1           2

应该是这样的:

   File, Paragraph, Sentence, E, ED
   1.txt, 1, 1, CM, C.M.
   1.txt, 1, 1, LF, L.F.
   1.txt, 2, 1, E, E.
   1.txt, 2, 1, M, M.
   1.txt, 4, 1, LF, L.F.
   1.txt, 4, 1, NM, N.M.

我怎样才能有效地做到这一点?

【问题讨论】:

    标签: r dataframe filtering data-manipulation querying


    【解决方案1】:

    只需将subset()%in% 运算符一起使用。

    subset(df, Paragraph %in% df1$Paragraph) # Assuming Paragraph is numeric in both
    #    File Paragraph Sentence  E.   ED
    #1 1.txt,         1       1, CM, C.M.
    #2 1.txt,         1       1, LF, L.F.
    #3 1.txt,         2       1,  E,   E.
    #4 1.txt,         2       1,  M,   M.
    #5 1.txt,         4       1, LF, L.F.
    #6 1.txt,         4       1, NM, N.M.
    

    【讨论】:

    • 当然数据帧是样本。所以我有不同的文件、段落和句子组合。我试过subset(df, File %in% df1$File & Paragraph %in% df1$Paragraph & Sentence %in% df1$Sentence) 但没有成功。不过我不知道是否可以使用subset()。正如@Zakkery 所建议的,我可以通过merge() 获得它。
    【解决方案2】:

    尝试使用合并。类似的东西:

    merge(x = first_data_frame, y = second_data_frame)
    

    这将合并它们,基本上就像 SQL 中的 JOIN(查找交集),并且应该只保留具有相同文件、段落、句子的记录。然后您可以取出额外的列“出现次数”。您可以阅读更多关于合并here 的内容。 您可以使用以下方法控制要合并的列:

    merge(x = first_data_frame, y = second_data_frame, by=c("File", "Paragraph", "Sentence"))
    

    【讨论】:

    • 之前我已经尝试使用merge(),但没有参数by
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 1970-01-01
    • 1970-01-01
    • 2014-03-27
    相关资源
    最近更新 更多