2017-04-11 18 views
1

文字列で作られたdata.frameのすべてのNAを ""に変更したいと思います。私はDplyrパッケージのmutate_each関数を使用しようとしましたが、動作しません(文字列の代わりに数値が得られます)。全体のdata.frameでNAを ""に変更してください

Df_with_NA <- as.data.frame(rbind(c("toto", "titi", NA, NA), c("tata", "tztz", "tutu", NA), c("toto","titi", "tutu", "tyty"))) 

empty_as_na <- function(x){ 
    ifelse(is.na(x), "", x) 
} 

Df_with_empty_string_instead_of_NA <- Df_with_NA %>% mutate_each(funs(empty_as_na)) 

あなたは何が間違っているか教えてもらえますか?

は、あなただけで罰金apply()、昔ながらを使用する必要があります

+0

は[stats.se]へようこそ!私たちの[ツアー]を見てください。 – Tavrock

+1

Rコードだけに関する質問はここで話題にはなりません。この質問には再現可能な例があるので、これは[SO]に関するトピックにあるはずです。あなたが待っている場合は、そこに移行しようとします。 – gung

+0

stringsAsFactors = Fを1行目に追加する(as.data.frame(...、stringsAsFactors = F) –

答えて

1
#First convert elements of 'Df_with_NA' to character and store in 'df' 
#This step is necessary because you didn't use stringsAsFactors = FALSE 
#when creating 'Df_with_NA' 
df = sapply(Df_with_NA, as.character) 

#Then replace NA with "" 
df[is.na(df)] = "" 
df 
#  V1  V2  V3  V4  
#[1,] "toto" "titi" ""  ""  
#[2,] "tata" "tztz" "tutu" ""  
#[3,] "toto" "titi" "tutu" "tyty" 
+0

' Df_with_NA [] lapply(Df_with_NA、as.character) 'は、data.frameをマトリックスに強制しないので、最初のステップではより良いでしょう。 – thelatemail

+0

db、thelatemail:ありがとうございます。どちらの解決策もOKです。実際には、stringsAsFactor(mr.joshuagordonの示唆)や文字のキャスト(つまり因子ではない)のいずれかを使用しています。 – Syl87

0

ありがとうございます。考えてみましょう:

Df_with_NA <- as.data.frame(rbind(c("toto", "titi", NA, NA), 
            c("tata", "tztz", "tutu", NA), 
            c("toto","titi", "tutu", "tyty"))) 
Df_with_NA 
#  V1 V2 V3 V4 
# 1 toto titi <NA> <NA> 
# 2 tata tztz tutu <NA> 
# 3 toto titi tutu tyty 
empty_as_na <- function(x){ 
    ifelse(is.na(x), "", x) 
} 

apply(Df_with_NA, 2, empty_as_na) 
#  V1  V2  V3  V4  
# [1,] "toto" "titi" ""  ""  
# [2,] "tata" "tztz" "tutu" ""  
# [3,] "toto" "titi" "tutu" "tyty" 
+0

ありがとうございます。このソリューションも機能します。最後にデータフレームに変換するだけで、 "as.data.frame " – Syl87

関連する問題