在数据帧列表中,我需要 Select 名为"id"的变量和包含"duo"的变量.因此,我将在输出中 for each datafrmae设置两个变量.

data <- list(foo = structure(list(bodyPart = c("leg", "arm", "knee"), 
side = c("LEFT", "RIGHT", "LEFT"), device = c("LLI", "LSM", 
"GHT"), `Duo:length` = c(12, 476, 7), id = c("AA", "BB", "CC"), 
mwID = c("a12", "k87", "j98")), class = "data.frame", row.names = c(NA, 
-3L)), bar = structure(list(bodyPart = c("ankel", "ear", "knee"
), `Duo:side` = c("LEFT", "LEFT", "LEFT"), device = c("GOM", "LSM", 
"YYY"), id = c("ZZ", "DD", "FF"), tqID = c("kj8", "ll23", "sc26"
)), class = "data.frame", row.names = c(NA, -3L)))

请注意,情况并非如此.

output <- list(foo = structure(list(`Duo:length` = c(12, 476, 7), id = c("AA", "BB", "CC")), 
class = "data.frame", row.names = c(NA, -3L)), 
bar = structure(list(`Duo:side` = c("LEFT", "LEFT", "LEFT"), id = c("ZZ", "DD", "FF")), 
class = "data.frame", row.names = c(NA, -3L)))

下面的代码只生成id列.我不知道为什么它不能得到包括Duo在内的专栏.

lapply(data_list, function(cr) cr %>% dplyr::select(id, where(~any(grepl("Duo", names(.))))))

我非常感谢你的建议.

推荐答案

使用dplyr语法:

library(dplyr)

purrr::map(data, ~.x %>% select(id, contains("Duo")))

#$foo
#  id Duo:length
#1 AA         12
#2 BB        476
#3 CC          7

#$bar
#  id Duo:side
#1 ZZ     LEFT
#2 DD     LEFT
#3 FF     LEFT

或者使用正则表达式.

purrr::map(data, ~.x %>% select(matches("^(id|Duo)")))

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

如何在弹性表中为类别值的背景上色

R形式的一维数字线/箱形图样式图表

使用ggplot 2根据R中的类别排列Likert比例gplot

R Highcharts与两个位置关联的注释

如何得到R中唯一的组合群?

R s iml包如何处理语法上无效的因子级别?'

在另存为PNG之前隐藏htmlwidget绘图元素

通过在colname中查找其相应值来创建列

try 将 colored颜色 编码添加到ggploly的标题中

ComplexHEAT:使用COLUMN_SPLIT时忽略COLUMN_ORDER

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

如何创建累加到现有列累计和的新列?

我如何使用tidyselect来传递一个符号数组,比如Pivot_Long?

为什么在写入CSV文件时Purrr::Pwalk不起作用

如何筛选截止年份之前最后一个测量年度的所有观测值以及截止年份之后所有年份的所有观测值

从线的交点创建面

有没有办法通过str_Detect()或其他字符串匹配函数来连接两个长度不等的数据帧?

使用ggplot2绘制具有边缘分布的坡度图

通过比较来自多个数据框的值和R中的条件来添加新列