2016-04-19 20 views
0

以下の関数が機能します。欠損値をデフォルト値に変換します欠損値(Char)をデフォルト値に変換する関数

convertNAsToDefault <- function(df, column, default) { 
    df[[column]] <- as.character(df[[column]]) 
    df[is.na(df[[column]]), column] <- default 
    df[[column]] <- as.factor(df[[column]]) 
    return (df) 
} 

これは使用方法です。

owners <- c('Becky', 'Alex', 'Jessica', 'Norm') 
pets <- c('cat', 'dog', NA, 'dog') 
d <- data.frame(owners, pets) 
glimpse(d) 

# Before: Jessica <NA> 
convertNAsToDefault(d, 'pets', 'unknown') 
# After: Jessica unknown 

私は、関数convertNAsToDefaultを(書かれたのは方法がある場合は、よりエレガントに)疑問に思ったり、これを行うために、既存のパッケージを使用しています。

答えて

1

あなたの機能だけでなく、欠損値をデフォルト値に変換しますが、データフレームの列を因子変数に変換します。

単に欠損値を除去するために、あなただけの論理ベクトル使う機能を必要としません:「Dの$ペット」は、すでに因子変数がある場合は、最初に新しいを定義する必要がもちろん

d[is.na(d)] <- "unknown" 

を、レベル "不明"

levels(d$pets) = c(levels(d$pets), "unknown") 
+0

これははるかに簡単です。ありがとう、MarkusN – BGA

0

あなたはまた、X、代わりにいくつかのデータセットDFと変数のifelse機能を使用することができます。

as.factor(ifelse(is.na(df$x), "unknown", as.character(x))) 

は、多くの変数内を移動するには、sapply使用することができます。

newdf <- data.frame(sapply(df, function(x) as.character(ifelse(is.na(df$x), 
                 "unknown", as.character(x))))) 
関連する問題