r - 我希望根据每个分组级别内的子列表保留/丢弃 PURRR 嵌套列表中的项目
问题描述
我有一组气象站数据,我希望按站点进行比较。我需要有效地做到这一点,因为每组都很大,我希望通过 PURRR 积累我的经验。我的问题涉及使用保留/丢弃(或 list.exclude (rlist))来删除数据不完整的天数(id) - 它应该是一个笨拙的但我无法获得正确的语法。我试图通过计算每个小标题的尺寸来解决这个问题,然后使用长度给我一个单一的列表)。我在运行 Windows 10 的 PC 上使用 R 3.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]>
解决方案
目前尚不清楚如何定义“不完整数据”,但由于问题更多是关于如何过滤列表中满足特定条件的行,因此我考虑了一个临时条件,即选择v
tibble 列具有第一个值的行0.这个条件可以在OP澄清后改变。
我们可以使用filter
来选择行并map_lgl
循环遍历data
每个id
.
library(tidyverse)
mylist %>% filter(map_lgl(data, ~first(.x$v) == 0))
# id data
# <chr> <list<df[,2]>>
#1 a [5 × 2]
同样,在基数 R 中,我们可以使用subset
withsapply
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()
推荐阅读
- php - 如何在 Symfony 4 上将可变会话包含到路由参数的默认值中?
- ios - UITextView 可点击链接对 iOS13 上的触发器(如果在该链接上触摸开始)动作敏感
- android - CameraX 是否支持使用 Kotlin 录制视频?
- c# - 去除彩色背景后的边缘平滑/校正
- javascript - 两条记录插入Mysql数据库而不是一条
- java - 如何在java中分离最后一个和剩余的所有单词?
- python - 从安装在主机上的远程服务器的 docker Jenkins shell 执行脚本
- c# - 方法返回错误“并非所有代码路径都返回值,请协助
- c++ - 在 Crypto++ 中使用 ECDSA 的正确方法是什么
- uwp - 除非大小更改,否则 UWP CommandBar 更多按钮不显示