2012-08-03 30 views
5

Birkaç veri çerçevesinden oluşan bir listem var. Her veri çerçevesindeki tüm sütunları NA'larla kaldırmak istiyorum. Kaldırılacak sütunların her bir veri çerçevesinde aynı olmadığını unutmayın. Aşağıda verilen örnek veriler. Herhangi bir öneri çok takdir.Listedeki tüm veri çerçevelerinden NA'lı sütunları kaldırın

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

cevap

7

deneyin bu

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

:

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

Ya tek data.frame geçmek, satırlar eritin ve çıkarın. Anlaması çok kolay. Teşekkürler! –

1

Julius'un cevabı harika ama ben zaten

Sorunuz biraz belirsiz ... yazmaya başladı, ancak o zamandan beri herhangi bir satırı kaldırmak istiyorsanız

lapply(WW1_Data, na.omit) 

Ya da kendi işlevini kullanabilirsiniz, eşek: listenizdeki her data.frame bir NA ile Listenizdeki her data.frame harcanmasına neden olur tek satır bu yaptığım gibi vardır: Bu mükemmel çalıştı

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