R:根据列名称和模式提取列表列

时间:2015-07-11 09:57:54

标签: r list indexing extract

我有一个列表(这里只是示例数据)

my_list <- list(structure(list(sample = c(2L, 6L), data1 = c(56L, 78L), 
    data2 = c(59L, 27L), data3 = c(90L, 28L), data1namet = structure(c(1L, 
    1L), .Label = "Sam1", class = "factor"), data2namab = structure(c(1L, 
    1L), .Label = "Test2", class = "factor"), dataame = structure(c(1L, 
    1L), .Label = "Ex3", class = "factor"), ma = c("Jay", "Jay"
    )), .Names = c("sample", "data1", "data2", "data3", "data1namet", 
"data2namab", "dataame", "ma"), row.names = c(NA, -2L), class = "data.frame"), 
    structure(list(sample = c(12L, 13L, 17L), data1 = c(56L, 
    78L, 3L), data2 = c(59L, 27L, 2L), datest = structure(c(1L, 
    1L, 1L), .Label = "Exa9", class = "factor"), dattestr = structure(c(1L, 
    1L, 1L), .Label = "cz1", class = "factor"), add = c(2, 2, 
    2)), .Names = c("sample", "data1", "data2", "datest", "dattestr", 
    "add"), row.names = c(NA, -3L), class = "data.frame"))

my_list
[[1]]
  sample data1 data2 data3 data1namet data2namab dataame  ma
1      2    56    59    90       Sam1      Test2     Ex3 Jay
2      6    78    27    28       Sam1      Test2     Ex3 Jay

[[2]]
  sample data1 data2 datest dattestr add
1     12    56    59   Exa9      cz1   2
2     13    78    27   Exa9      cz1   2
3     17     3     2   Exa9      cz1   2

我有两个问题: 我想根据列名的模式提取此列表中的列,例如包含单词&#39; data&#39;的所有列在他们的列名称中。我无法找到grep的解决方案。

我知道如何根据索引号提取一列(请参阅下面的示例),但是如何根据列名(而不是列号)直接进行此选择?

out <- lapply(my_list, `[`, 1) # extract "sample" column

1 个答案:

答案 0 :(得分:3)

尝试

lapply(my_list, function(df) df[, grep("data", names(df), fixed = TRUE)] )
# [[1]]
# data1 data2 data3 data1namet data2namab dataame
# 1    56    59    90       Sam1      Test2     Ex3
# 2    78    27    28       Sam1      Test2     Ex3
# 
# [[2]]
# data1 data2
# 1    56    59
# 2    78    27
# 3     3     2

lapply(my_list, "[", "sample")
# [[1]]
# sample
# 1      2
# 2      6
# 
# [[2]]
# sample
# 1     12
# 2     13
# 3     17