R 在两个嵌套对象上映射函数
我试图将函数R 在两个嵌套对象上映射函数,r,dplyr,purrr,R,Dplyr,Purrr,我试图将函数dplyr::mutate映射到一个数据集中包含的两组嵌套tibble上。我的目标是通过使用嵌套的tibblesdb$data.x中的相应系数,向嵌套在db$data.y中的每个tibble添加新列 下面,我提供了一个可复制的示例。每一行db表示我们正在验证的不同刻度。db$data.x中的嵌套TIBLES包含将用于执行进一步计算的方差分量。db$data.y中的嵌套tibble包含相同的两列集合,其中每行的次数(从1到10)和评分器(从1到2)的组合不同 library(dplyr
dplyr::mutate
映射到一个数据集中包含的两组嵌套tibble上。我的目标是通过使用嵌套的tibblesdb$data.x
中的相应系数,向嵌套在db$data.y
中的每个tibble添加新列
下面,我提供了一个可复制的示例。每一行db
表示我们正在验证的不同刻度。db$data.x
中的嵌套TIBLES包含将用于执行进一步计算的方差分量。db$data.y
中的嵌套tibble包含相同的两列集合,其中每行的次数(从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
#...
我尝试过使用
purrr::map2
,但如果我没有弄错的话,它可以在同一嵌套对象的两列上工作,而在本例中,我处理的是两个不同的嵌套对象。我也很乐意考虑其他解决方案。 < P>我认为你可以使用<代码> MAP2()/<代码>,但是你需要在<代码>突变()/代码>中使用它,这样你就可以使用这两个嵌套列作为该函数的前两个参数。p>
然后,您可以使用当前的mutate()
代码作为map2()
中的函数来修改data.y
。您将看到我将当前的data.y
替换为外部mutate()
中具有相同名称的修改对象
类似这样的东西看起来像:
db %>%
mutate(data.y = map2(data.x,
data.y,
~mutate(.y, Abs = .x[[1, 2]]/.y$Occasion +
.x[[2, 2]]/.y$Rater +
.x[[3, 2]]/(.y$Occasion*.y$Rater))))
第一个数据帧看起来像
db %>%
mutate(data.y = map2(data.x,
data.y,
~mutate(.y, Abs = .x[[1, 2]]/.y$Occasion +
.x[[2, 2]]/.y$Rater +
.x[[3, 2]]/(.y$Occasion*.y$Rater)))) %>%
pull(data.y) %>%
pluck(1)
# 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
...
db%>%
突变(data.y=map2(data.x,
数据.y,
~mutate(.y,Abs=.x[[1,2]]/.y$s+
.x[[2,2]]/.y$Rater+
.x[[3,2]]/(.y$sition*.y$Rater)))%>%
拉动(数据y)%>%
拔毛(1)
#一个tibble:20x3
场合评分器
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
...
db %>%
mutate(data.y = map2(data.x,
data.y,
~mutate(.y, Abs = .x[[1, 2]]/.y$Occasion +
.x[[2, 2]]/.y$Rater +
.x[[3, 2]]/(.y$Occasion*.y$Rater)))) %>%
pull(data.y) %>%
pluck(1)
# 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
...