2012-08-03 2 views
5

나는 여러 데이터 프레임으로 구성된 목록을 가지고 있습니다. 각 데이터 프레임에서 NA로 모든 열을 제거하고 싶습니다. 삭제할 열은 각 데이터 프레임에서 동일하지 않습니다. 샘플 데이터는 아래에 제공됩니다. 어떤 제안이라도 대단히 감사합니다.목록의 모든 데이터 프레임에서 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

:

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

또는 단일 data.frame로 전환은 행을 녹여 제거합니다. 이해하기가 쉽습니다. 감사! –

1

줄리어스 '대답은 매우 중요하지만, 난 이미

귀하의 질문이 좀 모호 ... 쓰기 시작했지만, 이후 당신은 어떤 행을 제거하려면

lapply(WW1_Data, na.omit) 

또는 당신이 당신의 자신의 기능을 사용할 수 있습니다, 엉덩이 : 목록에있는 각 data.frame에서 NA와 목록에 각 data.frame을 uming 만 한 행이이처럼이 : 이것은 완벽하게 작동

out <- do.call(rbind, WW1_Data) 
out.m <- melt(out, id.vars='Site_Name') 
na.omit(out.m) 
관련 문제