0

役に立たない変数を取り除くために、自動フィルタリングを実行しようとしています。このコマンドを使用して、テーブルで「x」回以上繰り返される値を削除するコマンドでデータを処理していました

df <- df[, which(apply(df, 2, function(col) !any(table(col) > x)))] 

私は今同じことを適用しようとしていますが、2つのレベルでは、私のデータは次のようになります

df <- structure(list(V1 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 1, 0, 11, 12, 
13, 14, 15, 16, 17, 18, 19, 20), V2 = c(2, 2, 2, 2, 2, 2, 2, 
2, 0, 0, 0, 2, 2, 7, 2, 3, 4, 6, 4, 5, 2), V3 = c(0, 0, 0, 0, 
0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1), level = structure(c(1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor")), .Names = c("V1", 
"V2", "V3", "level"), row.names = c(NA, 21L), class = "data.frame")

A と B の両方のレベルで、同じ値を x 回 (この例では 5 回) 以上繰り返す変数を削除したいと思います。目的の出力は次のとおりです。

df2 <- structure(list(V1 = c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 1L, 
0L, 11L, 12L, 13L, 14L, 15L, 16L, 17L, 18L, 19L, 20L), V2 = c(2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 0L, 0L, 0L, 2L, 5L, 7L, 2L, 3L, 4L, 
6L, 4L, 5L, 2L), level = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("A", 
"B"), class = "factor")), .Names = c("V1", "V2", "level"), class = "data.frame", row.names = c(NA, 
-21L))

レベルに応じてデータを考えsubset()、前のコマンドを実行して再度結合しましたが、これは非常に長い道のりのように思えました。仕事をするための適切なコマンドが思いつきません。これを行う短いコマンドのアイデアはありますか?

ありがとう、

4

1 に答える 1