1

役に立たない変数を取り除くためにデータフレームを改良しています。私が行った最初のステップは、次のコマンドを使用して、行の半分以上がNA値である列を削除することでした。

limit <- nrow(mydata)/2
mydata <- mydata[, which(as.numeric(colSums(!is.na(mydata))) > limit)] 

ゼロについても同じことをするのを楽しみにしていますが、「is.zero()」のような関数が見つかりませんでした。どうすればよいですか?

私が楽しみにしているもう1つのことは、「制限」回数を超えて任意の値を繰り返す列を削除することです(そのようなコマンドが存在する場合は理想的です!)

どうもありがとう、

4

2 に答える 2

5

ただ行う:

mydata <- mydata[, which(as.numeric(colSums(mydata != 0)) > limit)] 

「制限」回数を超えて任意の値を繰り返す列を削除する場合は、、、および:を使用tableできanyますapply

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

最後に、これらの両方の場合whichはオプションであり、as.numeric最初の場合は不要であることに注意してください。あなたは簡単に行うことができます:

mydata <- mydata[, colSums(mydata != 0) > limit] 
于 2013-03-08T15:26:25.430 に答える
2

ゼロ以外を探すには、単に。に置き換え!is.na(mydata)ますmydata != 0

最も頻度の高い要素の数を取得するには、次を使用できます。

> mydata <- c(1,2,3,4,1,1,1,2,1,3)
> sort(table(mydata), decreasing=T)[[1]]
[1] 5

最も繰り返される実際の値を確認するには、次のようにします。

> names(sort(table(mydata), decreasing=T)[1])
[1] "1"

値を保持する必要がない場合は、次max()の代わりに使用できsort()ます。

> max(table(mydata))
[1] 5
于 2013-03-08T15:26:30.067 に答える