如何使用R中的列名从另一个列表中选择表列表?

时间:2012-04-07 01:18:18

标签: r

我是R编程的初学者,并且想过如果无法使用列名选择表,并从主列表的每个元素中的不同表的列表列表中创建表的列表更清楚,我有此列表中按产品分类的产品列表。像这样:

  1. 产品A:
    • 表1 - a栏;栏b;栏c;
    • 表2 - 第j栏;列k;第l栏;
  2. 产品B:
    • 表1 - 第i栏;第二栏;第三栏;
    • 表2 - a栏;栏b;栏c;
    • 表3 - 列m;列n;栏o;
  3. 但是,产品数量是多少,我不知道产品A中的表1是否与产品B中的表相同,但我知道我想要的表的列名是相同的在其他产品表(如表1(产品A)和表2(产品B))中,是否可以使用特定的列名选择产品表?

1 个答案:

答案 0 :(得分:1)

filter.by.colnames <- function(tab.list, col.names) {
    lapply(tab.list, function(product) Filter(function(tab) col.names %in% colnames(tab), product))
}

此函数将为您提供tab.list中的表列表,其中列名称中包含col.names中的字符串。

>tab.list <- list(ProductA = list(Table1 = table(1:3, c('a', 'b', 'c')),
                                 Table2 = table(1:3, c('j', 'k', 'l'))),
                 ProductB = list(Table1 = table(1:3, c('i', 'ii', 'iii')),
                                 Table2 = table(1:3, c('a', 'b', 'c')),
                                 Table3 = table(1:3, c('m', 'n', 'o'))
                                 ))
>filter.by.colnames(tab.list, c('a'))

给你

$ProductA
$ProductA$Table1

    a b c
  1 1 0 0
  2 0 1 0
  3 0 0 1


$ProductB
$ProductB$Table2

    a b c
  1 1 0 0
  2 0 1 0
  3 0 0 1