Ошибка в fix.by (by.x, x): 'by' должно определять один или несколько столбцов как числа, имена или логические данные - PullRequest
0 голосов
/ 05 мая 2020

У меня есть несколько файлов

file_analysis = read.xlsx(listfiles[1],sheetIndex = 1,header = FALSE)###
#View(file_analysis)
str(file_analysis)
file_comments =  read.csv("C:/Users/adm/Downloads/comments.csv",sep=";")
#View(file_comments)
file_groups = read.xlsx(listfiles[6],sheetIndex = 1,header = FALSE)  ####
#View(file_groups)
file_headeers = read.xlsx(listfiles[7],sheetIndex = 1,header = FALSE)
file_photos = read.csv("C:/Users/adm/Downloads/photos.csv",sep=";")
#View(file_photos)
file_profiles = read.xlsx(listfiles[12],sheetIndex = 1,header = FALSE) ####
#View(file_profiles)
file_profiles3 = read.xlsx(listfiles[13],sheetIndex = 1,header = FALSE)###
#View(file_profiles)
file_statistics = read.csv("C:/Users/adm/Downloads/statistics.csv",sep=";")
#View(file_statistics)
file_videos = read.csv("C:/Users/adm/Downloads/videos.csv",sep=";")
#View(file_videos)

Мне нужно просто слить их с одним набором данных

n=merge(file_comments,file_groups,file_photos ,file_profiles,
      file_profiles3,file_statistics,

      file_videos, by ="owner_id")

но он возвращает мне ошибку

Error in fix.by (by.x, x): 'by' must define one or more columns as numbers, names or logical data

this Ошибка в fix.by (by.x, x): 'by' должен указывать однозначно допустимый столбец mergedata <- merge (dataset1, dataset2, by.x = "personalid") </a> и это Объединение данных - Ошибка в fix.by (by.x, x) мне не помогает. И я не знаю почему.

owner_id is numeri c

пример

258894746

3389571
3389572
3389573
3389574
118850

Что не так? мне нужно объединить все файлы сразу.

1 Ответ

0 голосов
/ 05 мая 2020

merge не принимает более двух фреймов данных. Вы должны применить его рекурсивно с помощью Reduce или purrr::reduce функции см. Здесь

Base R

 Reduce(function(dtf1, dtf2) merge(dtf1, dtf2, by = "owner_id"),
           list(file_comments,file_groups,file_photos ,file_profiles,
                file_profiles3,file_statistics,
                file_videos)
        )

tidyverse синтаксис

library(dplyr)
library(purrr)

list(file_comments,file_groups,file_photos ,file_profiles,
      file_profiles3,file_statistics,
      file_videos) %>% reduce(inner_join, by = "owner_id")

Кстати, если вы предпочитаете левое соединение, а не внутреннее соединение (то, которое вы намеревались использовать):

  • добавьте all.x = TRUE аргумент в merge
  • используйте left_join вместо inner_join в решении tidyverse
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...