我希望根据每个分组级别内的子列表,在PURRR嵌套列表中保留/放弃项目

我希望根据每个分组级别内的子列表,在PURRR嵌套列表中保留/放弃项目,r,purrr,R,Purrr,我有几组气象站数据,我希望按站点进行比较。我需要有效地做到这一点,因为每个集合都很大,我希望建立我的PURRR经验。我的问题涉及使用keep/discard或list.exclude rlist删除数据不完整的days id-这应该是一个错误,但我无法获得正确的语法。我试图通过计算每个TIBLE的维数来解决这个问题,然后使用长度给我一个单一列表。我正在运行Windows10的PC上使用R3.6.1。这里有一个简单的例子。我希望'mylist'仅在本例中包含id='a' mylist <-

我有几组气象站数据,我希望按站点进行比较。我需要有效地做到这一点,因为每个集合都很大,我希望建立我的PURRR经验。我的问题涉及使用keep/discard或list.exclude rlist删除数据不完整的days id-这应该是一个错误,但我无法获得正确的语法。我试图通过计算每个TIBLE的维数来解决这个问题,然后使用长度给我一个单一列表。我正在运行Windows10的PC上使用R3.6.1。这里有一个简单的例子。我希望'mylist'仅在本例中包含id='a'

mylist <- tibble(id = c(rep("a",5),rep("b",4)),
                 dl = c(seq(1,5,1), seq(1,4,1)),
                 v = c(seq(0, 40, 10), seq(50, 80, 10))) %>%
  group_by(id) %>%
  nest() %>%
  mutate(ddim = map(data, dim)) %>%
  mutate(nn = map(ddim, extract(1)))
mylist
# A tibble: 2 x 4
# Groups:   id [2]
  id              data ddim      nn       
  <chr> <list<df[,2]>> <list>    <list>   
1 a            [5 x 2] <int [2]> <int [1]>
2 b            [4 x 2] <int [2]> <int [1]>

不清楚不完整数据是如何定义的,但由于问题更多的是如何过滤列表中满足特定条件的行,因此我考虑了一个临时条件,即选择行,其中TIBLE的v列的第一个值为0。该条件可在OP澄清后更改

我们可以使用filter来选择行,并映射lgl来循环每个id的数据列

资料


如何定义不完整数据?id=b怎么会有不完整的数据?抱歉,我的简单示例太简单了。每个id的数据帧都有一个可变长度-列数相同,但行数不同,每行中的数据相似,任何级别都可能出现缺少行的情况。因此,对dim进行过滤似乎是最好的方法。map_lgl需要一个值,因此我提取了dim的行数分量。因此,不能对“数据”作出决定,必须对派生值作出决定。mylist应该是随机的,而不是按顺序排列的:-如果要根据行数进行筛选,可以执行mylist%>%filtermap_intdata,nrow>4,它将选择数据中超过4行的行,您可以用任何值替换4。
library(tidyverse)

mylist %>% filter(map_lgl(data, ~first(.x$v) == 0))

# id              data
#  <chr> <list<df[,2]>>
#1 a            [5 × 2]
subset(mylist, sapply(data, function(x) x$v[1] == 0))
mylist <- tibble(id = c(rep("a",5),rep("b",4)),
             dl = c(seq(1,5,1), seq(1,4,1)),
             v = c(seq(0, 40, 10), seq(50, 80, 10))) %>%
           group_by(id) %>% nest()