我想尝试根据未嵌套的数据中的值过滤嵌套列中的数据。
require(purrr)
require(dplyr)
set.seed(314)
dat1 <- data.frame(id = 1:3, tres1 = 1:3*10, tres2 = 2:4*10)
dat2 <- data.frame(id = rep(1:3, each = 20),
var = rnorm(20, 20,5))
dat <- dat1 %>% inner_join(dat2 %>% nest(-id))
我尝试了这个(以及其他可能性)
dat %>%
mutate(map(data, ~filter(var > tres1, var < tres2)))
我不知道该怎么解决。
> str(dat)
'data.frame': 3 obs. of 3 variables:
$ id : int 1 2 3
$ tres1: num 10 20 30
$ tres2: num 20 30 40
$ data:List of 3
..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 20 obs. of 1 variable:
.. ..$ var: num 13.6 23.6 15.8 16.5 20.6 ...
..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 20 obs. of 1 variable:
.. ..$ var: num 13.6 23.6 15.8 16.5 20.6 ...
..$ :Classes ‘tbl_df’, ‘tbl’ and 'data.frame': 20 obs. of 1 variable:
.. ..$ var: num 13.6 23.6 15.8 16.5 20.6 ...
答案 0 :(得分:1)
如果我们需要使用多列,那么pmap
会更好。请注意
library(tidyverse)
dat2 %>%
group_by(id) %>%
nest %>%
inner_join(dat1) %>%
mutate(data = pmap(list(data, tres1, tres2), ~
..1 %>%
filter(var > ..2, var < ..3)))
# A tibble: 3 x 4
# id data tres1 tres2
# <int> <list> <dbl> <dbl>
#1 1 <tibble [10 × 1]> 10 20
#2 2 <tibble [8 × 1]> 20 30
#3 3 <tibble [0 × 1]> 30 40
注意:根据?pmap
对于两个参数的函数,请使用.x和.y
有关更多参数,请使用..1,.. 2,.. 3 e
为保持一致,我们使用..
表示法,尽管.x
和.y
应该适用于此处的前2个变量