6

いくつかのデータフレームで構成されたリストがあります。各データフレームのNAを持つすべての列を削除したいと思います。削除する列は、各データフレームで同じではないことに注意してください。以下に提供されるサンプルデータ。どんな提案でも大歓迎です。

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

2 に答える 2

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
...
于 2012-08-03T14:31:25.510 に答える
1

ジュリアスの答えは素晴らしいですが、私はすでに書き始めたので...

NAあなたの質問は少し曖昧ですが、リスト内の各data.frameから。を含む行を削除したい場合:

lapply(WW1_Data, na.omit)

または、リスト内の各data.frameに次のように1行しかない場合は、独自の関数を使用できます。

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)
于 2012-08-03T14:32:39.243 に答える