Delete columns with NA from all data frames in the list

I have a list consisting of several data frames. I would like to delete all columns with NA in each data frame. Note that the columns to be deleted do not match in each data frame. Examples of data are given below. Any suggestions that were highly appreciated.

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"))
+5
source share
2 answers

try it

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
...
+7
source

Julius's answer is great, but since I already started writing ...

Your question is a bit ambiguous, but if you want to remove any line from NAfrom each data.frame file to your list:

lapply(WW1_Data, na.omit)

Or you can use your own function, assuming that each data.frame in your list contains only one line:

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)
+1

All Articles