2012-08-03 27 views
5

我有一个由多个数据框组成的列表。我想在每个数据框中删除所有含有NAs的列。请注意,要删除的列在每个数据框中都不相同。下面提供的示例数据。任何建议非常感谢。从列表中的所有数据框中移除具有NAs的列

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

回答

7

试试这个

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

这完美地工作。这很容易理解。谢谢! – 2012-08-03 14:57:33

1

朱利叶斯的答案是伟大的,但因为我已经开始写...

你的问题有点含糊,但如果你想删除的任何行从你的列表中的每个data.frame的NA

lapply(WW1_Data, na.omit) 

或者您可以使用自己的功能,屁股在列表中uming每个data.frame只有一排这样的事:

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

lapply(WW1_Data, myfun) 

,或者切换到单data.frame,熔化和删除行:

out <- do.call(rbind, WW1_Data) 
out.m <- melt(out, id.vars='Site_Name') 
na.omit(out.m) 
相关问题