空の文字列をNAに変換する関数を記述しようとしています。私の列の1つの要約は次のようになります。
a b
12 210 468
12個の空の値をNAに変更したいと思います。空の値をNAに変更したい他のいくつかの因子列もあるので、ここからあちこちにいくつかのものを借りてこれを思いつきました:
# change nulls to NAs
nullToNA <- function(df){
# split df into numeric & non-numeric functions
a<-df[,sapply(df, is.numeric), drop = FALSE]
b<-df[,sapply(df, Negate(is.numeric)), drop = FALSE]
# Change empty strings to NA
b<-b[lapply(b,function(x) levels(x) <- c(levels(x), NA) ),] # add NA level
b<-b[lapply(b,function(x) x[x=="",]<- NA),] # change Null to NA
# Put the columns back together
d<-cbind(a,b)
d[, names(df)]
}
ただし、次のエラーが発生します。
> foo<-nullToNA(bar) Error in x[x == "", ] <- NA : incorrect number of subscripts on matrix Called from: FUN(X[[i]], ...)
私はここで見つかった答えを試しました: すべての0の値をNAに置き換えます ですが、すべての列が数値に変更されます。
論理条件に一致するフィールドに直接インデックスを付けることができます。だからあなたはただ書くことができます:
_df[is_empty(df)] = NA
_
ここで、_is_empty
_は比較です。 _df == ""
_:
_df[df == ""] = NA
_
ただし、is.null(df)
は機能せず、とにかく奇妙です1。ただし、さまざまなタイプの列のロジックをマージしないことをお勧めします。代わりに、個別に処理してください。
1 基になるベクトルがNULL
である場合にのみ機能するため、テーブル内でlist
に遭遇することはほとんどありません。この制約を使用して行列とdata.framesを作成できますが、TRUE
の値はリスト内にラップされるため、is.null(df)
がNULL
になることはありません)。
どうですか:
df[apply(df, 2, function(x) x=="")] = NA
少なくとも簡単な例では、私にとってはうまくいきます。
これは私のために働いた
df[df == 'NULL'] <- NA
これは私がこの問題を解決するために使用した機能です。
null_na=function(vector){
new_vector=rep(NA,length(vector))
for(i in 1:length(vector))
if(vector[i]== ""){new_vector[i]=NA}else if(is.na(vector[i]))
{new_vector[i]=NA}else{new_vector[i]=vector[i]}
return(new_vector)
}
問題のあるカラムまたはベクターを接続するだけです。