2012-04-07 9 views
1

Ich bin Anfänger in R-Programmierung und dachte, wenn es nicht möglich ist, Tabellen mit einem Spaltennamen zu wählen und eine Liste von Tabellen aus einer Liste von Listen mit verschiedenen Tabellen in jedem Element der Hauptliste zu erstellen, um klarer zu sein, ich habe eine Liste der Produkte mit verschiedenen Tabellen nach Produkt in dieser Liste. Wie folgt aus:Wie wähle ich eine Liste von Tabellen aus einer anderen Liste mit einem Spaltennamen in R?

  1. Produkt A:
    • Tabelle 1 - Spalte a; Spalte b; Spalte c;
    • Tabelle 2 - Spalte j; Spalte k; Spalte l;
  2. Produkt B:
    • Tabelle 1 - Spalte i; Spalte ii; Spalte iii;
    • Tabelle 2 - Spalte a; Spalte b; Spalte c;
    • Tabelle 3 - Spalte m; Spalte n; Spalte o;

jedoch, wie die Anzahl der Produkte ist enorm, und ich weiß nicht, ob Tabelle 1 im Produkt A die gleiche Tabelle in dem Produkt B ist, aber ich weiß, dass die Tabelle Ich mag hat Spaltenname, der in anderen Produkttabellen gleich ist (wie Tabelle 1 (Produkt A) und Tabelle 2 (Produkt B)), ist es möglich, Tabellen anhand eines bestimmten Spaltennamens nach Produkt auszuwählen?

Antwort

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

Diese Funktion werden Ihnen die Saiten in col.names in ihren Spaltennamen, die eine Liste von Listen von Tabellen aus tab.list geben.

>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')) 

gibt Ihnen

$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 
Verwandte Themen