2016-04-05 7 views
0

私はデータフレーム(df1、df2 ..、dfn)からなるリスト(list1)を持っています。各データは、因子(f1、f2、..)と数値(n1、n2、...)の変数で構成されています。例えばましょう:係数列は、列が削除される3未満の観測がある場合リスト内の条件に従ってデータフレームの列を削除する-R

list1[[1]]: 

df1: 

f1 f2 f3 n1 n2 
--- --- --- --- --- 
a c x 12 5 
a c x 5 65 
a c y 21 90 
b a x 45 6 
b a x 33 11 
a a y 5 39 
a a y 73 22 

list1[[2]]: 

df2: 

f4 f5 n1 n2 n3 
--- --- --- --- --- 
d c 12 5 41 
d b 5 65 14 
d c 21 90 51 
a a 45 6 85 
d a 33 11 7 
a a 5 39 1 
a a 73 22 16 

所望の出力、すなわち

list2[[1]]: 

df1: 

f2 f3 n1 n2 
--- --- --- --- 
c x 12 5 
c x 5 65 
c y 21 90 
a x 45 6 
a x 33 11 
a y 5 39 
a y 73 22 

list2[[2]]: 

df2: 

f4 n1 n2 n3 
--- --- --- --- 
d 12 5 41 
d 5 65 14 
d 21 90 51 
a 45 6 85 
d 33 11 7 
a 5 39 1 
a 73 22 16 

LIST2あります。上記例えば

  • list1$df1$f1は3未満であるが、だから、f1は出力で削除され
  • list1$df2$f5 1「b」を有し、小さい2「C」観測2「B」の観測を有します3. f5は出力時に削除されます。

Rを使ってどうすればいいですか?私はどんな助けでも非常に勇気づけられます。どうもありがとう。

答えて

2

これは必要なものですか?

lapply(list1, function(df) df[, sapply(df, function(x) is.numeric(x) | (is.factor(x) && min(table(x))>=3))]) 

それは、あなたのリストに沿って、すべてのレベルのために、少なくとも3でのみ数値列または因子を返すこの機能、適用されます。ここでのdputがあり、list1を再作成するには

df1[, sapply(df1, function(x) is.numeric(x) | (is.factor(x) && min(table(x))>=3))] 


を:

list1 <- 
    list(structure(list(f1 = structure(c(1L, 1L, 1L, 2L, 2L, 1L, 
    1L), .Label = c("a", "b"), class = "factor"), f2 = structure(c(2L, 
    2L, 2L, 1L, 1L, 1L, 1L), .Label = c("a", "c"), class = "factor"), 
     f3 = structure(c(1L, 1L, 2L, 1L, 1L, 2L, 2L), .Label = c("x", 
     "y"), class = "factor"), n1 = c(12L, 5L, 21L, 45L, 33L, 5L, 
     73L), n2 = c(5L, 65L, 90L, 6L, 11L, 39L, 22L)), .Names = c("f1", 
    "f2", "f3", "n1", "n2"), class = "data.frame", row.names = c(NA, 
    -7L)), structure(list(f4 = structure(c(2L, 2L, 2L, 1L, 2L, 1L, 
    1L), .Label = c("a", "d"), class = "factor"), f5 = structure(c(3L, 
    2L, 3L, 1L, 1L, 1L, 1L), .Label = c("a", "b", "c"), class = "factor"), 
     n1 = c(12L, 5L, 21L, 45L, 33L, 5L, 73L), n2 = c(5L, 65L, 
     90L, 6L, 11L, 39L, 22L), n3 = c(41L, 14L, 51L, 85L, 7L, 1L, 
     16L)), .Names = c("f4", "f5", "n1", "n2", "n3"), class = "data.frame", row.names = c(NA, 
    -7L))) 
関連する問題