У меня есть data.table с вложенными полями, такими как:
library(data.table)
dt <- data.table(name_var = c("Abel","Abel", "Bill", "Bill", "Craig", "Craig", "Craig")
, value_var = c(1,2,3,4,5,6,7)
, car_color = c("B","B","B","G","G","G","G")
)
dt_2 <- dt[,.(.(.SD)), by = name_var]
Функция ниже преобразует данные через указанную функцию:
transform_value <- function(x, fun, campo, ...) {
x [, get (fun)(get(campo), ...)]
}
Например, можно вычислить среднее значение от value_var
внутри вложенного V1
:
dt_2[, mean_value:=lapply(V1, transform_value, "mean", "value_var")]
, которое корректно приводит к
name_var V1 mean_value
1: Abel <data.table> 1.5
2: Bill <data.table> 3.5
3: Craig <data.table> 6
Однако, когда я пытаюсь вычислить журнал вложенного value_var
Я получаю:
dt_2[, log_value:=lapply(V1, transform_value, "log", "value_var")]
, что приводит к:
name_var V1 mean_value log_value
1: Abel <data.table> 1.5 0.0000000,0.6931472
2: Bill <data.table> 3.5 1.098612,1.386294
3: Craig <data.table> 6 1.609438,1.791759,1.945910
Хотя значения правильные, на самом деле я хотел бы иметь значения журнала рядом друг с другом внутри V1
, например как:
> dt_2$V1[[1]]
value_var car_color log_value
1: 1 B 0.0000000
2: 2 B 0.6931472
Как мне это сделать?
Спасибо.