tolower功能和合并两个数据帧

时间:2018-05-04 16:02:35

标签: r merge tolower merging-data

我分别调用了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中具有相同名称的列不是& #39; t合并。

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

我不明白为什么它在第一个例子中起作用而不是在第二个例子中起作用。我无法指定任何列,因为我有很多匹配的名称列和许多不匹配的列。

应该可以不指定对吗?

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

对于这个冗长的解释感到抱歉,但我真的需要回答,而且我已经在SO上阅读了很多Q / A并且没有找到答案。

1 个答案:

答案 0 :(得分:0)

也许值得一试:

Client client = ClientBuilder.newBuilder() .sslContext(SSLContext.getInstance("TLSv1.2")) // more settings, such as key/truststore, timeouts, logging .build();

这仅通过公共列合并。

话虽如此,您使用rbind进行此操作的预感可能更正确。如果这是来自不同时间段的数据,并且它们没有重叠,则rbind会简单地将一个堆叠在另一个之上。这并不总是很顺利,但这是一个粗略的破解:

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