Я пытаюсь отобразить функцию dplyr::mutate
на два набора вложенных элементов таблицы, содержащихся в наборе данных.Моя цель - добавить новые столбцы к каждому столбцу, вложенному в db$data.y
, используя соответствующие коэффициенты во вложенных столбцах db$data.x
.
. Ниже я привел воспроизводимый пример.Каждая строка db
относится к разной шкале, которую мы проверяем.Вложенные столбцы в db$data.x
содержат компоненты дисперсии, которые будут использоваться для дальнейших вычислений.Вложенные тиблы в db$data.y
содержат одинаковый набор из двух столбцов, в которых комбинация числа случаев (от 1 до 10) и оценщиков (от 1 до 2) различна для каждой строки.
library(dplyr)
library(purrr)
coefficients <- data.frame(Scale = rep(1:5, each = 5),
Component = rep(c("R", "S", "T", "RxS", "SxT"), 5),
Value = rep(c(2, 4, 7, 3, 5, 5, 6, 7, 3, 5, 2, 6, 3, 6, 4, 7, 3, 7, 12, 8, 7, 11, 14, 9, 2))) %>%
group_by(Scale) %>% nest()
sim.data <- data.frame(Scale = rep(1:5, each = 20),
Occasion = rep(1:10, 2),
Rater = rep(1:2, each = 10)) %>%
group_by(Scale) %>% nest()
db <- left_join(coefficients, sim.data, by = "Scale")
#> db
# A tibble: 5 x 3
# Scale data.x data.y
# <int> <list> <list>
#1 1 <tibble [5 x 2]> <tibble [20 x 2]>
#2 2 <tibble [5 x 2]> <tibble [20 x 2]>
#3 3 <tibble [5 x 2]> <tibble [20 x 2]>
#4 4 <tibble [5 x 2]> <tibble [20 x 2]>
#5 5 <tibble [5 x 2]> <tibble [20 x 2]>
#> db$data.x[[1]]
# A tibble: 5 x 2
# Component Value
# <fct> <dbl>
#1 R 2
#2 S 4
#3 T 7
#4 RxS 3
#5 SxT 5
#> db$data.y[[1]]
# A tibble: 20 x 2
# Occasion Rater
# <int> <int>
# 1 1 1
# 2 2 1
# 3 3 1
# 4 4 1
# 5 5 1
# 6 6 1
# 7 7 1
# 8 8 1
# 9 9 1
#10 10 1
#11 1 2
#...
Конечная цель - вычислить столбец db$data.y$Abs
для каждой шкалы, для которой нам нужно использовать компоненты дисперсии, содержащиеся в db$data.x
.Я мог бы сделать это для каждого масштаба отдельно, но это кажется чрезвычайно трудоемким.Кто-нибудь может помочь с этим?
db$data.y[[1]] %>%
mutate(Abs = db$data.x[[1]][[1,2]] / db$data.y[[1]]$Occasion +
db$data.x[[1]][[2,2]] / db$data.y[[1]]$Rater +
db$data.x[[1]][[3,2]] / (db$data.y[[1]]$Occasion * db$data.y[[1]]$Rater))
# A tibble: 20 x 3
# Occasion Rater Abs
# <int> <int> <dbl>
# 1 1 1 13
# 2 2 1 8.5
# 3 3 1 7
# 4 4 1 6.25
# 5 5 1 5.8
# 6 6 1 5.5
# 7 7 1 5.29
# 8 8 1 5.12
# 9 9 1 5
#10 10 1 4.9
Я пытался с purrr::map2
, но, если я не ошибаюсь, он работает на двух столбцах одного и того же вложенного объекта, тогда как в этом случае яЯ имею дело с двумя разными вложенными объектами.Я был бы рад рассмотреть и другие решения.