繰り返し処理を行う場合、私は犬がAにおける機能の名前である場合は因子レベルの頻度が10以上サブセットは、データフレーム
ある私のデータフレームのサブセットをしようとしている特異なケースでの作業ではなく、データフレーム:
は動作しません:
somevar <- "dogs"
df <- subset(df, with(df, somevar %in% names(which(table(somevar)>=10))))
戻り値0観測
とDFが作業を行います。
df <- subset(df, with(df, dogs %in% names(which(table(dogs)>=10))))
その周波数が10未満ですと犬のレベルが違いは何
を削除されているところ、これら以来、数より少ない行を持つDF戻り、なぜ第二1つの作業が、以前のものはないでしょうか?
データフレーム内のフィーチャーをループする必要があるので、私は動作しない方法が必要です!私は、forループに
再現例機能名のベクトルを渡したい:
vegetables <- c("carrots", "carrots", "carrots", "carrots", "carrots")
animals <- c("cats", "dogs", "dogs", "fish", "cats")
df <- data.frame(vegetables, animals)
df
vegatables animals
1 carrots cats
2 carrots dogs
3 carrots dogs
4 carrots fish
5 carrots cats
> str(df)
'data.frame': 5 obs. of 2 variables:
$ vegatables: Factor w/ 1 level "carrots": 1 1 1 1 1
$ animals : Factor w/ 3 levels "cats","dogs",..: 1 2 2 3 1
私は彼らがこの場合の周波数では因子機能の観測周波数2未満を持っている任意の観測を削除したいです動物の因子内のレベルの魚は1であるので、私はdfが1つの観察によって減少することを期待している:
> test <- subset(df, with(df, animals %in% names(which(table(animals) >= 2))))
> test
vegatables animals
1 carrots cats
2 carrots dogs
3 carrots dogs
5 carrots cats
グレート。
categoricals <- names(df)
for (i in categoricals) {
test <- subset(df, with(df, i %in% names(which(table(i) >= 10))))
}
は、空のデータフレームDFを返します:私はこれを行う際に、それを除いて
は動作しません。私はそれが上記のテストdfとまったく同じに戻ると思った。
類似:
i <- "animals"
test <- subset(df, with(df, i %in% names(which(table(i) >= 2))))
> test
[1] vegatables animals
<0 rows> (or 0-length row.names)
私は私が直接機能付きに動物を入力したときと同じように動作する最後の例を期待。
問題は、あなたのループ内で 'df'を上書きするということです。したがって、2回目の反復では、 'df'はすでに空になっています。 結果を他の変数に格納することが解決策になります。 –
こんにちは@BenjaminMohn、私は質問に多くを追加しました。それはforループでさえありません。上記の「動作しない/動作しない」を参照してください。 –
'dogs!=" dogs "' – Hugh