无法使用 dplyr 和 purrr 从嵌套心理列表中提取元素
Trouble extracting elements from a nested psych list using dplyr and purrr
我在 R 中有一个嵌套数据框,我向它应用了 psych 包中的一个函数。我将结果列表添加到数据框中。我现在想创建一个新列,其中包含该列表中的特定元素。原则上,我知道这是如何工作的,但由于某种原因,结果列表为 NULL。我可以验证我从中提取的列表不是空的,所以我想知道问题是什么。任何帮助将非常感激。下面是可重现的例子。
library(psych)
library(tidyverse)
tibble( A = c( 1, 2, 3, 4),
B = c( 1, 2, 3 ,4),
C = c( 2, 3, 3, 5),
group = c( 1, 1, 1, 1))%>%
group_by( group) %>%
nest() %>%
mutate( ICC_results = data %>% map( ICC)) -> df
# Now I would like to add a variable containing a numeric element from the list, so ideally use map_dbl, but that gives an error because extracting any element from the list results in an empty list
df %>%
mutate( ICC3 = ICC_results %>% map( 9))
# A tibble: 1 x 4
# Groups: group [1]
group data ICC_results ICC3
<dbl> <list> <list> <list>
1 1 <tibble [4 x 3]> <psych> <NULL>
# I can verify that the element I am looking to extract is not empty
df %>%
select( ICC_results) %>%
unlist() %>%
str()
List of 76
$ ICC_results.results.type1 : chr "ICC1"
$ ICC_results.results.type2 : chr "ICC2"
$ ICC_results.results.type3 : chr "ICC3"
$ ICC_results.results.type4 : chr "ICC1k"
$ ICC_results.results.type5 : chr "ICC2k"
$ ICC_results.results.type6 : chr "ICC3k"
$ ICC_results.results.ICC1 : num 0.857
$ ICC_results.results.ICC2 : num 0.862
$ ICC_results.results.ICC3 : num 0.949
$ ICC_results.results.ICC4 : num 0.947
$ ICC_results.results.ICC5 : num 0.949
$ ICC_results.results.ICC6 : num 0.982
....
一个选项可以是:
df %>%
group_by(group) %>%
nest() %>%
mutate(ICC_results = map_dbl(data,
~ pluck(ICC(.), "results") %>%
filter(type == "ICC3") %>%
pull(ICC)))
group data ICC_results
<dbl> <list> <dbl>
1 1 <tibble [4 × 3]> 0.949
我在 R 中有一个嵌套数据框,我向它应用了 psych 包中的一个函数。我将结果列表添加到数据框中。我现在想创建一个新列,其中包含该列表中的特定元素。原则上,我知道这是如何工作的,但由于某种原因,结果列表为 NULL。我可以验证我从中提取的列表不是空的,所以我想知道问题是什么。任何帮助将非常感激。下面是可重现的例子。
library(psych)
library(tidyverse)
tibble( A = c( 1, 2, 3, 4),
B = c( 1, 2, 3 ,4),
C = c( 2, 3, 3, 5),
group = c( 1, 1, 1, 1))%>%
group_by( group) %>%
nest() %>%
mutate( ICC_results = data %>% map( ICC)) -> df
# Now I would like to add a variable containing a numeric element from the list, so ideally use map_dbl, but that gives an error because extracting any element from the list results in an empty list
df %>%
mutate( ICC3 = ICC_results %>% map( 9))
# A tibble: 1 x 4
# Groups: group [1]
group data ICC_results ICC3
<dbl> <list> <list> <list>
1 1 <tibble [4 x 3]> <psych> <NULL>
# I can verify that the element I am looking to extract is not empty
df %>%
select( ICC_results) %>%
unlist() %>%
str()
List of 76
$ ICC_results.results.type1 : chr "ICC1"
$ ICC_results.results.type2 : chr "ICC2"
$ ICC_results.results.type3 : chr "ICC3"
$ ICC_results.results.type4 : chr "ICC1k"
$ ICC_results.results.type5 : chr "ICC2k"
$ ICC_results.results.type6 : chr "ICC3k"
$ ICC_results.results.ICC1 : num 0.857
$ ICC_results.results.ICC2 : num 0.862
$ ICC_results.results.ICC3 : num 0.949
$ ICC_results.results.ICC4 : num 0.947
$ ICC_results.results.ICC5 : num 0.949
$ ICC_results.results.ICC6 : num 0.982
....
一个选项可以是:
df %>%
group_by(group) %>%
nest() %>%
mutate(ICC_results = map_dbl(data,
~ pluck(ICC(.), "results") %>%
filter(type == "ICC3") %>%
pull(ICC)))
group data ICC_results
<dbl> <list> <dbl>
1 1 <tibble [4 × 3]> 0.949