У меня есть 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
Я не понимаю, почему это работало в первом примере, а не во втором. Я не могу указать какие-либо столбцы, потому что у меня СЛИШКОМ много столбцов имен, которые совпадают, и много несовпадающих.
Должна быть возможность не указывать правильно?
Кроме того, я хочу сохранить все имена столбцов, совпадающие и не совпадающие с обоими df.
Извините за это длинное объяснение, но мне действительно нужен ответ, и я прочитал много вопросов и ответов по SO и не нашел своего ответа.
str()
в обоих фреймах данных, чтобы узнать, как выглядят имена столбцов и структура каждого из них. Имейте в виду, что выполнениеsetnames(barometre2013, tolower(names(barometre2013)))
на самом деле ничего не делает. Вам нужно будет присвоить значение обратноbarometre2013
, если вы хотите, чтобы результат был устойчивым. - person IRTFM   schedule 04.05.2018rbindlist
на моей машине взято из data.table. Это будет иметь полезный результат в виде повышения вашей репутации до такой степени, что вы сможете комментировать другие сообщения (и, возможно, другие вещи, о которых я забыл). Технически это операция добавления, а не то, что в компьютерном языке известно как слияние. - person IRTFM   schedule 08.05.2018