Вопросrmongodb - объединить два кадра данных в один документ в коллекции
Использование R
и rmongodb
, как создать MongoDB документ из двух кадров данных, второй из которых будет элемент массива из первый?
данных
Моя первая data.frame всегда одна строка. , например.
df_1 <- data.frame(myVar1 = 1,
myVar2 = 2,
myVar3 = 3)
Моя вторая data.frame всегда одна или более строк например,
df_2 <- data.frame(arrVar1 = c(1,2),
arrVar2 = c(1,2))
Требуемое решение
моя цель состоит в том, чтобы иметь документ в коллекции, структурированную как:
# {
# "_id" : ObjectId("565a939aa30fff2d67bfd492"),
# "vars" : {
# "myVar1" : 1.0000000000000000,
# "myVar2" : 2.0000000000000000,
# "myVar3" : 3.0000000000000000,
# "myArr" : [
# {
# "arrVar1" : 1,
# "arrVar2" : 1
# },
# {
# "arrVar1" : 2,
# "arrVar2" : 2
# }
# ]
# }
# }
Как я могу добиться этого?
Редактировать
(удалены все мои попытки)
спасибо Дмитрию за ответ и показывая мне, что структура мне нужно достигнуть.
Таким образом, я проверил несколько разных способов получения решения.
library(microbenchmark)
fun_1 <- function(df){
list(myArr = unname(split(df, seq(nrow(df)))))
}
fun_2 <- function(df){
list('myArr' = Map(function(i, d) d[i, ],
seq_len(nrow(df)),
MoreArgs = list('d' = df)
))
}
fun_3 <- function(df){
list(myArr = (lapply(as.list(1:dim(df)[1]), function(x) df[x[1],])))
}
microbenchmark(fun_1(df_2), fun_2(df_2), fun_3(df_2), times = 1000)
Unit: microseconds
expr min lq mean median uq max neval
fun_1(df_2) 162.135 176.7315 197.8129 187.7065 201.0385 1555.802 1000
fun_2(df_2) 84.770 92.2840 102.3595 96.3135 108.8165 1441.410 1000
fun_3(df_2) 85.052 93.8675 103.7496 97.9310 109.4090 1422.860 1000
, когда вы говорите, что это кажется таким простым! – tospig