如何使用 grepl() 在数据帧列表中选择特定字符串?

问题描述 投票:0回答:1

在数据帧列表中,我需要选择名为“id”的变量和包含“Duo”的变量。因此,我将在输出中为每个 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("Corrected", names(.))))))

我非常感谢您的建议。

r select dplyr grepl
1个回答
0
投票

你可以做

> lapply(data, \(x) x[, grepl("^id$|^Duo", colnames(x))])
$foo
  Duo:length id
1         12 AA
2        476 BB
3          7 CC

$bar
  Duo:side id
1     LEFT ZZ
2     LEFT DD
3     LEFT FF
© www.soinside.com 2019 - 2024. All rights reserved.