R объединить в петле - PullRequest
0 голосов
/ 17 мая 2018

У меня есть много CSV-файлов, которые я хочу прочитать, а затем объединить с файлом большего размера (каждый файл объединяется отдельно).Поэтому я написал эту функцию для чтения файлов (работает):

read <- function(x) {
    read.csv(paste("StringCount_Length=", x, ".csv", sep = ""), header=TRUE, sep=",")
}

Теперь я хочу перебрать файлы, прочитать и объединить их.Тем не менее, слияние не работает, выдавая мне следующее сообщение об ошибке:

Ошибка в fix.by (by.x, x): 'by' должен указывать уникально допустимый столбец

Я не получаю сообщение об ошибке, если я помещаю определенный файл в команду слияния, поэтому моя ошибка должна быть там, но я не могу понять, где я ошибся.Был бы признателен за любую помощь или совет!

for (x in c(2:5)) { 
  assign(paste("data", x, sep=""), read(x))
  assign(paste("data_total_",x, sep=""), merge(paste("data", x, sep=""),    data_old, by="Subject"))
}

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Кроме того, вы можете рассмотреть возможность использования списка data.tables и объединить их, используя Reduce, как описано в этом ответе .

0 голосов
/ 17 мая 2018

Аналогично функции assign , когда вы назначаете объект строке имени, вам нужно использовать функцию get , где вы вызываете объект, используя строку имени объектавместо непосредственного использования имени объекта.

Приведенный ниже код должен выполнять работу, в которой мы инкапсулируем функцию вставки с помощью функции get.

Например, для x = 2 будет доступен фрейм данных data2.с вызовом функции get ("data2")

for (x in c(2:5)) { 
  assign(paste("data", x, sep=""), read(x))
  assign(paste("data_total_",x, sep=""), 
  merge(get(paste("data", x, sep="")),    data_old, by="Subject"))
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...