Как объединить два файла .rda в R? - PullRequest
0 голосов
/ 10 июля 2019

У меня есть два файла .rda со многими переменными и кадрами данных, для которых уже установлены некоторые значения. Оба файла rda имеют одинаковые имена переменных и имена данных. Однако их порядок отличается. Я хочу объединить два файла rda в один файл .rda, как мы добавляем два кадра данных.

Я пытался использовать rbind для объединения двух объектов, содержащих файлы .rda, как показано ниже

X <- c(1,2,3)
Y <- c("A","B","C")

rbind(X,Y)

save(X,Y,file="samplerda.rda")
load(file = "samplerda.rda")


X <- c(4,5,6)
Y <- c("D","E","F")
save(X,Y,file="samplerda1.rda")
load(file = "samplerda1.rda")

ob1 <- load(file = "samplerda.rda")
ob2 <- load(file = "samplerda1.rda")
combine12 <- rbind(ob1, ob2)
save(combine12, file="En1.rda")
load("En1.rda")
print(combine12)

Тем не менее, я печатаю объект comb12, который я ожидал ниже вывода

X  Y 
1 "A"
2 "B"
3 "C"
4 "D"
5 "E"
6 "F"

Фактический вывод -

    [,1] [,2]
ob1 "X"  "Y" 
ob2 "X"  "Y"

1 Ответ

1 голос
/ 10 июля 2019

Функция load() возвращает имена загруженных объектов, поэтому и ob1, и ob2 будут содержать c("X", "Y"), а когда вы rbind, вы получите матрицу, которую вы видели в combine12.

Вам понадобится гораздо более сложный код, чтобы делать то, что вы хотите, например:

env1 <- new.env()
env2 <- new.env()
ob1 <- load(file = "samplerda.rda", envir = env1)
ob2 <- load(file = "samplerda1.rda", envir = env2)
stopifnot(all(ob1 == ob2))  # Sanity check

combine12 <- list()
for (n in ob1) {
  combine12[[n]] <- c(get(n, env1), get(n, env2))
}
combine12 <- as.data.frame(combine12)
...