【问题标题】:merge() in R is not returning the desired resultR中的merge()没有返回所需的结果
【发布时间】:2016-05-01 07:23:45
【问题描述】:

我有要合并的名为 exp 和 cat 的数据框。 以下是数据框:

> exp
   keyword keyword2
1      SLD      SLD
2  TRUNION   GANTRY
3     PCON      LVA
4      SLD      SLD
5   GANTRY     GCON

> cat
            keyword category
1                PA      11-113
2                IQ      151-16
3              GCON      25-11
4              PCON      29-11
5               HVA      12-41
6               LVA      22-31
7              HCON      21-40
8                LR      2-50
9                TP      12-16
10              CID      25-66
11               HD        31
12              LLD      35-10
13              SLD      37-12
14              RTT      3-26
15          TRUNION      31-35
16           GANTRY      13-15

但是在合并这两个数据帧后,我只得到了 NA。 请让我知道我哪里出错了。

这是函数及其输出:

>merge(exp,cat, by='keyword',all.x = TRUE)

   keyword keyword2 Category
1     PCON      LVA     <NA>
2      SLD      SLD     <NA>
3      SLD      SLD     <NA>
4  TRUNION   GANTRY     <NA>
5   GANTRY     GCON     <NA>

【问题讨论】:

  • 你能输入exp和cat吗?
  • @ZahiroMor,完全同意,这样会更好,尽管read.table("clipboard") 在这里工作得很好。 @SowmyaT.K,你想要的结果是什么? cat[ cat$keyword %in% exp$keyword, ] 能完成这项工作吗?对了,不要用cat作为变量名,是保留字。
  • 是的。我将变量名更改为 cat1。但是,输出仍然充满了 NA。是的。我将使用 dput() 进行检查。谢谢
  • @vaettchen cat 不是 R 中的保留字。它只是 base 函数(以及 exp)的名称。
  • > dput(exp) structure(list(keyword = structure(c(15L, 17L, 12L, 15L, 22L), .Label = c("CID", "ECG LEADS", "GCON ”、“HCON”、“HVA”、“IQ”、“L-ARM”、“L ARM”、“轻轨”、“LLD”、“LVA”、“PCON”、“PPM”、“RELO”、 “SLD”、“SNAC”、“TRUNION”、“TRUNNION”、“UPS”、“COVERS”、“电气”、“龙门”、“硬件”、“旋转”、“触摸板”、“触摸板”)、 class= "因子"),keyword=.....), .Names = c("keyword", "keyword2"), row.names = c(NA, -5L), class= "data.frame") ........这是 dput(exp) 的输出

标签: r dataframe merge


【解决方案1】:

我无法重现您的错误。以下代码适用于我:

exp <- data.frame(keyword=c("SLD", "TRUNION", "PCON", "SLD", "GANTRY"), keyword2=c("SLD", "GANTRY", "LVA", "SLD", "GCON"))

cat <- data.frame(keyword=c("PA", "IQ", "GCON", "PCON", "HVA", "LVA", "HCON", "LR", "TP", "CID", "HD", "LLD", "SLD", "RTT", "TRUNION", "GANTRY"), category=c("11-113", "151-16", "25-11", "29-11", "12-41", "22-31", "21-40", "2-50", "12-16", "25-66", "31", "35-10", "37-12", "3-26", "31-35", "13-15"))

merge(exp, cat, all.x=TRUE, by="keyword")
  keyword keyword2 category
1  GANTRY     GCON    13-15
2    PCON      LVA    29-11
3     SLD      SLD    37-12
4     SLD      SLD    37-12
5 TRUNION   GANTRY    31-35

如果您使用 dput() 来提供您的实际 expcat,将会有所帮助。然后我们更有可能弄清楚发生了什么。我注意到 Category 在合并的 df 中大写,但在 cat 中没有大写,因此我怀疑您在两者之间(可能是不经意间)还没有共享另一个步骤。

【讨论】:

  • 没有。在这里编辑问题时,它在没有我通知的情况下意外变成了大写。输出仅显示小写类别。谢谢。
  • 第一个数据帧实际上有超过 1k 行。我刚刚将 5 行提取到数据帧 exp。
【解决方案2】:

如果您的exp 数据集是小写,则转换为大写并合并,

exp <- as.data.frame(sapply(exp, toupper))
merge(exp,cat, by='keyword',all.x = TRUE)
#  keyword keyword2 category
#1  GANTRY     GCON    13-15
#2    PCON      LVA    29-11
#3     SLD      SLD    37-12
#4     SLD      SLD    37-12
#5 TRUNION   GANTRY    31-35

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多