r - R - 如何按名称从列表的子列表中选择元素
问题描述
我有一个看起来像这样的列表:
list(list("A[1]" = data.frame(W = 1:5),
"A[2]" = data.frame(X = 6:10),
B = data.frame(Y = 11:15),
C = data.frame(Z = 16:20)),
list("A[1]" = data.frame(W = 21:25),
"A[2]" = data.frame(X = 26:30),
B = data.frame(Y = 31:35),
C = data.frame(Z = 36:40)),
list("A[1]" = data.frame(W = 41:45),
"A[2]" = data.frame(X = 46:50),
B = data.frame(Y = 51:55),
C = data.frame(Z = 56:60))) -> dflist
我需要我的输出也是一个长度为 3 的列表列表,以便每个子列表保留名称以开头的元素,A[
同时删除其他元素。
基于以前的一些问题,我正在尝试使用它:
dflist %>%
map(keep, names(.) %in% "A[")
但这给出了以下错误:
Error in probe(.x, .p, ...) : length(.p) == length(.x) is not TRUE
尝试选择单个元素,例如A[1]
:
dflist %>%
map(keep, names(.) %in% "A[1]")
也不起作用。我怎样才能达到预期的输出?
解决方案
我想你想要:
purrr::map(dflist, ~.[stringr::str_starts(names(.), "A\\[")])
这是做什么的:
- 对于每个子列表 (
purrr::map
)- 选择该子列表的所有元素( ,子列表
.[]
在哪里.
) - 谁的名字以
A[
(stringr::str_starts(names(.), "A\\[")
)开头
- 选择该子列表的所有元素( ,子列表
你得到了正确的顶层map
,因为你想修改子列表。但是,map(keep, names(.) %in% "A[")
有一些问题:
names(.) %in% "A["
应该是一个函数或一个公式(以~
purrr::keep
将过滤功能应用于子列表的每个元素,即直接应用于数据帧。它永远不会“看到”每个数据框的名称。实际上,我认为您根本keep
无法解决此问题
无论如何,这会产生:
[[1]]
[[1]]$`A[1]`
W
1 1
2 2
3 3
4 4
5 5
[[1]]$`A[2]`
X
1 6
2 7
3 8
4 9
5 10
[[2]]
[[2]]$`A[1]`
W
1 21
2 22
3 23
4 24
5 25
[[2]]$`A[2]`
X
1 26
2 27
3 28
4 29
5 30
[[3]]
[[3]]$`A[1]`
W
1 41
2 42
3 43
4 44
5 45
[[3]]$`A[2]`
X
1 46
2 47
3 48
4 49
5 50
推荐阅读
- android - 从 Uri 获取文件导致 Kotlin 中的 FileNotFoundException,如何获取真实的文件路径
- python - Django - 在 HTML 中嵌入 python 以触发两个表单操作
- python - 为numpy中的每一行选择列
- android-context - 带有“上下文”的代码示例。当我粘贴它们时不起作用
- git - 如何忽略 json 文件?
- angular6 - Angular 6 - 反应式表单选择选项 - 数据库数据与选择列表选项
- javascript - TypeError:使用“窗口”时无法读取未定义反应错误的属性“位置”
- javascript - 'mat-tree' 不是已知元素:
- javascript - 如何在生产构建后解决Angular给定的错误(未定义订阅)?
- azure - 在 azure 上部署 asp.net core web api 时出现 404 错误