0

我分别调用了 3 个数据框:barometre2013、barometre2016、barometre2018。

我已经像这样合并 barometre2018 和 barometre2016 :

baro1618 <- merge(barometre2016, barometre2018, all = TRUE)

一切都很好,我有两个数据框的所有行,并且相同的列名与两个数据框的所有行合并为一个。正是我想要的。

合并后的表如下所示:

names(baro1618)
    [1] "q0qc"           "regio"          "sexe"           "age"            "langu"          "q1a_1"          "q1a_2"          "q1a_3"          "q1a_4"          "q1a_5"         
    [11] "q1a_6"          "q1a_7"          "q1a_8"          "q1a_9"          "q1a_10"         "q1b_1"          "q1b_2"          "q1b_3"          "q1b_4"          "q1b_5"         
    [21] "q1b_6"          "q1b_7"          "q1b_8"          "q1b_9"          "q1b_10"

现在,我的问题从这里开始。

我想将 baro1618 与 barometre2013 合并,但在此之前我必须将所有列名称小写,因为当我尝试合并而不这样做时,barometre2013 的大写列与小写 baro1618 具有相同名称的列未合并.

df barometre2013 看起来像这样:

names(barometre2013)
    [229] "POND"        "Q1A_1"       "Q1A_2"       "Q1A_3"       "Q1A_4"       "Q1A_5"       "Q1A_6"       "Q1A_7"       "Q1A_8"       "Q1A_9"       "Q1A_10"      "Q1B_1"      
    [241] "Q1B_2"       "Q1B_3"       "Q1B_4"       "Q1B_5"       "Q1B_6"       "Q1B_7"       "Q1B_8"       "Q1B_9"       "Q1B_10"      "Q5A_1"       "Q5A_2"       "Q5A_3"  

所以我尝试了这两种小写的解决方案(都有效):

barometre2013 <- setnames(barometre2013, tolower(names(barometre2013)))

colnames(barometre2013) <- tolower(colnames(barometre2013))

结果:

[229] "pond"        "q1a_1"       "q1a_2"       "q1a_3"       "q1a_4"       "q1a_5"       "q1a_6"       "q1a_7"       "q1a_8"       "q1a_9"       "q1a_10"      "q1b_1"      
[241] "q1b_2"       "q1b_3"       "q1b_4"       "q1b_5"       "q1b_6"       "q1b_7"       "q1b_8"       "q1b_9"       "q1b_10"      "q5a_1"       "q5a_2"       "q5a_3"  

但是,当我尝试像这样合并时:

baro1118 <- merge(baro1618, barometre2013, all = TRUE)

它给了我这个错误:

Error in fix.by(by.x, x) : 'by' must specify a uniquely valid column

我不明白为什么它在第一个示例中有效,而在第二个示例中无效。我无法指定任何列,因为我有太多匹配的名称列和很多不匹配的列。

应该可以不指定吧?

另外,我想保留所有匹配的列名和不匹配的列名。

很抱歉这么长的解释,但我真的需要答案,我已经阅读了很多关于 SO 的 Q/A 并没有找到我的答案。

4

1 回答 1

0

也许值得一试:

baro1118 <- merge(baro1618, barometre2013, all = TRUE, by=intersect(names(baro1618), names(barometre2013))

这仅按公共列合并。

话虽如此,您对此使用 rbind 的预感可能更正确。如果这是来自不同时间段的数据,并且它们不重叠,则 rbind 将简单地将一个堆叠在另一个之上。这并不总是一帆风顺,但这里有一个粗略的 hack:

# maybe barometre2013 has missing column names
missing.column.names <- setdiff(names(baro1618), names(barometre2013))
barometre2013[, missing.column.names] <- NA

# maybe baro1618 has missing column names
missing.column.names <- setdiff(names(barometre2013), names(baro1618))
baro1618[, missing.column.names] <- NA
于 2018-07-12T15:10:38.217 回答