-2

R に 74 列のデータ フレームがあります。これらの列のうち 60 列は因子で、残りには連続データが含まれています。因子である列のうち、レベルの 1 つとして NULL を含むものがあります。NULL 値が含まれている可能性があるすべての観測を削除したいと思います。各観測には、一意の識別番号を含む ID 列があります。次のコード スニペットを使用しています。

x <- mydata[which(mydata$column2 == "NULL"), ]
mydata <- mydata[!mydata$ID %in% x$ID, ]

ただし、これを次のように繰り返し使用すると:

x <- mydata[which(mydata$column3 == "NULL"), ]
mydata <- mydata[!mydata$ID %in% x$ID, ]

データ フレームで NA を取得し始めます。私は何を間違っていますか?助けに感謝します。

4

2 に答える 2

1

もう にない行を参照しているため、NA を取得していますmydata。ただし、いずれにせよ、データを繰り返しトリミングするという考えは、パフォーマンスとコードの明快さに関しては良い考えではありません。代わりにこれを試してください:

mydata<-mydata[!apply(mydata,1,function(x) any(x=="NULL")),]

ここでは、少なくとも 1 回の値を含む行を確認し"NULL"、それらの行を削除します。

于 2013-03-05T20:16:38.390 に答える
0

私はおそらく次のようなことをするでしょう:

# identify the factor columns
factor.cols <- sapply(mydata, is.factor)

# for each row, count how many factor columns contain "NULL"
null.count <- rowSums(mydata[factor.cols]=="NULL")

# keep only those rows with no "NULL" factor values,
# along with rows where all factor values are NA
mydata[is.na(null.count) | null.count==0,]

NA(特定の行のすべての因子列に s がある場合、正しいことを行うように編集されました。)

于 2013-03-05T20:29:12.310 に答える