过滤 Dataframe 列表中的 Dataframe “名称”(R,dplyr)

2q5ifsrm  于 2023-01-28  发布在  其他
关注(0)|答案(3)|浏览(128)

df_list包含以下 Dataframe 的列表:
x一名男子一名x一名男子二名x一名男子三名x一名男子四名x一名男子五名x
有没有一种方法可以根据 Dataframe 的“名称”条件从列表中删除 Dataframe ?(我知道DF_1不一定是第一个 Dataframe 的属性;这只是调用 Dataframe 的方式。)
例如,我正在寻找一种方法来过滤“名称”中包含奇数的 Dataframe (即DF_1、DF_3、DF_5)。
我试过使用 Dataframe 的“名称”,但是遇到了麻烦。我只能访问每个 Dataframe 中的列名。
总之,我正在寻找一种方法来选择 Dataframe 列表中的 Dataframe 基于条件(不是手动)。谢谢你这么多提前!

gjmwrych

gjmwrych1#

这里有一种方法,它作用于列表的名称和整个列表,而不是列表的单个元素。

df_list_2 <- df_list[ grepl('[13579]$', names(df_list) ) ]

这使用了正则表达式和奇数以奇数结尾的事实,你也可以提取结尾的数字,使用%%来确定奇/偶,然后用它来子集化列表。

chhqkbe1

chhqkbe12#

当然,从名称中提取数字,然后编写测试并传递给[

library(stringr)
name_nums = df_list |> names() |> str_extact("[0-9]+") |> as.integer()
odd_list = df_list[name_nums %% 2 == 1]
jq6vz3qz

jq6vz3qz3#

使用sub的另一种方法

df_list[as.numeric(sub(".*_(\\d+)$", "\\1", names(df_list))) %% 2 == 1]
$DF_1
# A tibble: 3 × 1
      a
  <int>
1     1
2     2
3     3

$DF_3
# A tibble: 3 × 1
      a
  <int>
1     1
2     2
3     3

$DF_5
# A tibble: 3 × 1
      a
  <int>
1     1
2     2
3     3
数据
df_list <- list(DF_1 = structure(list(a = 1:3), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -3L)), DF_2 = structure(list(
    a = 1:3), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L)), DF_3 = structure(list(a = 1:3), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -3L)), DF_4 = structure(list(
    a = 1:3), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-3L)), DF_5 = structure(list(a = 1:3), class = c("tbl_df", "tbl", 
"data.frame"), row.names = c(NA, -3L)))

相关问题