2012-08-03 5 views
5

Ich habe eine Liste, die aus mehreren Datenrahmen besteht. Ich möchte alle Spalten mit NAs in jedem Datenrahmen entfernen. Beachten Sie, dass die zu entfernenden Spalten nicht in jedem Datenrahmen identisch sind. Beispieldaten zur Verfügung gestellt unten. Irgendwelche Vorschläge sehr geschätzt.entfernen Sie Spalten mit NAs von allen Datenrahmen in der Liste

WW1_Data <- structure(list(Alnön = structure(list(Site_Name = structure(1L, .Label = 
c("Alnön","Ammarnäs", "Anjan", "Bäcksand", "Fittjebodarna", "Flatruet", 
"Glen", "Idre", "Klångstavallen", "Kramfors", "Ljungdalen", "Ljungris", 
"Mårdsund", "Mörtsjön", "Nordmaling", "Öster_Galåbodarna", "Ramundberget", 
"Rätan", "Särvfjället", "Smedstorp", "Söderhamn", "Stensoffa", 
"Storulvån", "Sveg", "Tanna", "Tänndalen", "Vålådalen", "Vemdalsskalet" 
), class = "factor"), X1996 = 0.307692307692308, X1997 = NA_real_, 
X2000 = 0.260869565217391, X2001 = NA_real_, X2002 = NA_real_, 
X2003 = NA_real_, X2008 = NA_real_, X2009 = NA_real_, X2010 = 0.0833333333333333, 
X2011 = NA_real_), .Names = c("Site_Name", "X1996", "X1997", 
"X2000", "X2001", "X2002", "X2003", "X2008", "X2009", "X2010", 
"X2011"), row.names = 1L, class = "data.frame"), Ammarnäs = structure(list(
Site_Name = structure(2L, .Label = c("Alnön", "Ammarnäs", 
"Anjan", "Bäcksand", "Fittjebodarna", "Flatruet", "Glen", 
"Idre", "Klångstavallen", "Kramfors", "Ljungdalen", "Ljungris", 
"Mårdsund", "Mörtsjön", "Nordmaling", "Öster_Galåbodarna", 
"Ramundberget", "Rätan", "Särvfjället", "Smedstorp", "Söderhamn", 
"Stensoffa", "Storulvån", "Sveg", "Tanna", "Tänndalen", "Vålådalen", 
"Vemdalsskalet"), class = "factor"), X1996 = 0.75, X1997 = NA_real_, 
X2000 = NA_real_, X2001 = NA_real_, X2002 = NA_real_, X2003 = NA_real_, 
X2008 = NA_real_, X2009 = NA_real_, X2010 = NA_real_, X2011 = 0.8), .Names = 
c("Site_Name", "X1996", "X1997", "X2000", "X2001", "X2002", "X2003", "X2008", 
"X2009", "X2010", "X2011"), row.names = 2L, class = "data.frame"), 
Anjan = structure(list(Site_Name = structure(3L, .Label = c("Alnön", 
"Ammarnäs", "Anjan", "Bäcksand", "Fittjebodarna", "Flatruet", 
"Glen", "Idre", "Klångstavallen", "Kramfors", "Ljungdalen", 
"Ljungris", "Mårdsund", "Mörtsjön", "Nordmaling", "Öster_Galåbodarna", 
"Ramundberget", "Rätan", "Särvfjället", "Smedstorp", "Söderhamn", 
"Stensoffa", "Storulvån", "Sveg", "Tanna", "Tänndalen", "Vålådalen", 
"Vemdalsskalet"), class = "factor"), X1996 = NA_real_, X1997 = NA_real_, 
X2000 = NA_real_, X2001 = NA_real_, X2002 = NA_real_, 
X2003 = NA_real_, X2008 = NA_real_, X2009 = 0.52, X2010 = 0.5, 
X2011 = NA_real_), .Names = c("Site_Name", "X1996", "X1997", 
"X2000", "X2001", "X2002", "X2003", "X2008", "X2009", "X2010", 
"X2011"), row.names = 3L, class = "data.frame"), Bäcksand = structure(list(
Site_Name = structure(4L, .Label = c("Alnön", "Ammarnäs", 
"Anjan", "Bäcksand", "Fittjebodarna", "Flatruet", "Glen", 
"Idre", "Klångstavallen", "Kramfors", "Ljungdalen", "Ljungris", 
"Mårdsund", "Mörtsjön", "Nordmaling", "Öster_Galåbodarna", 
"Ramundberget", "Rätan", "Särvfjället", "Smedstorp", 
"Söderhamn", "Stensoffa", "Storulvån", "Sveg", "Tanna", 
"Tänndalen", "Vålådalen", "Vemdalsskalet"), class = "factor"), 
X1996 = NA_real_, X1997 = NA_real_, X2000 = 0.0833333333333333, 
X2001 = NA_real_, X2002 = NA_real_, X2003 = NA_real_, 
X2008 = NA_real_, X2009 = NA_real_, X2010 = 0.375, X2011 = NA_real_), .Names = 
c("Site_Name", "X1996", "X1997", "X2000", "X2001", "X2002", "X2003", "X2008", 
"X2009", "X2010", "X2011"), row.names = 4L, class = "data.frame"), 
Fittjebodarna = structure(list(Site_Name = structure(5L, .Label = c("Alnön", 
"Ammarnäs", "Anjan", "Bäcksand", "Fittjebodarna", "Flatruet", 
"Glen", "Idre", "Klångstavallen", "Kramfors", "Ljungdalen", 
"Ljungris", "Mårdsund", "Mörtsjön", "Nordmaling", "Öster_Galåbodarna", 
"Ramundberget", "Rätan", "Särvfjället", "Smedstorp", "Söderhamn", 
"Stensoffa", "Storulvån", "Sveg", "Tanna", "Tänndalen", "Vålådalen", 
"Vemdalsskalet"), class = "factor"), X1996 = NA_real_, X1997 = NA_real_, 
X2000 = NA_real_, X2001 = NA_real_, X2002 = NA_real_, 
X2003 = NA_real_, X2008 = 0.4, X2009 = 0.423076923076923, 
X2010 = NA_real_, X2011 = NA_real_), .Names = c("Site_Name", 
"X1996", "X1997", "X2000", "X2001", "X2002", "X2003", "X2008", 
"X2009", "X2010", "X2011"), row.names = 5L, class = "data.frame")), .Names = c("Alnön", 
"Ammarnäs", "Anjan", "Bäcksand", "Fittjebodarna")) 

Antwort

7

Versuchen Sie, diese

lapply(WW1_Data, function(x) x[, !is.na(x)]) 
$Alnön 
    Site_Name  X1996  X2000  X2010 
1  Alnön 0.3076923 0.2608696 0.08333333 

$Ammarnäs 
    Site_Name X1996 X2011 
2 Ammarnäs 0.75 0.8 
... 
+0

Das funktionierte perfekt. Es ist sehr einfach zu verstehen. Vielen Dank! –

1

Julius' Antwort ist groß, aber da begann ich schon schreiben ...

Ihre Frage ein wenig zweideutig ist, aber wenn Sie möchten, eine Zeile entfernen mit einem NA von jedem data.frame in Ihrer Liste:

lapply(WW1_Data, na.omit) 

Oder Sie können Ihre eigene Funktion verwenden, ass nur jede data.frame in Ihrer Liste uming hat eine Zeile wie diese tun:

myfun <- function(x) { 
    x[, !is.na(x)] 
} 

lapply(WW1_Data, myfun) 

oder auf einen einzigen data.frame wechseln, es schmelzen und entfernen Reihen:

out <- do.call(rbind, WW1_Data) 
out.m <- melt(out, id.vars='Site_Name') 
na.omit(out.m) 
Verwandte Themen