私の最初のアプローチは、csvからデータを読み取るときに_na.strings=""
_を使用することでした。これは何らかの理由で機能しません。私も試しました:
_df[df==''] <- NA
_
これによりエラーが発生しました:列のインデックス付けに行列または配列を使用できません。
私はカラムだけを試しました:
_df$col[df$col==''] <- NA
_
これにより、空の文字列以外に値がある場合でも、データフレーム全体のすべての値がNAに変換されます。
次に、_mutate_all
_を使用しようとしました:
_replace.empty <- function(a) {
a[a==""] <- NA
}
#dplyr pipe
df %>% mutate_all(funs(replace.empty))
_
これにより、データフレーム全体のすべての値もNAに変換されます。
最初の方法は効果がなかったので何がわからないので、「空の」文字列について何かがおかしいと思います。
EDIT(MKRのリクエストによる)dput(head(df))
の出力:
_structure(c("function (x, df1, df2, ncp, log = FALSE) ", "{",
" if (missing(ncp)) ", " .Call(C_df, x, df1, df2, log)",
" else .Call(C_dnf, x, df1, df2, ncp, log)", "}"), .Dim = c(6L,
1L), .Dimnames = list(c("1", "2", "3", "4", "5", "6"), ""), class =
"noquote")
_
なぜかわかりませんdf[df==""]<-NA
はOP
では機能しませんでした。サンプルのdata.frameを取り、オプションを調べてみましょう。
オプション#1: Base-R
df[df==""]<-NA
df
# One Two Three Four
# 1 A A <NA> AAA
# 2 <NA> B BA <NA>
# 3 C <NA> CC CCC
Option#2: 1dplyr :: mutate_all1およびna_if
。またはmutate_if
データフレームに複数のタイプの列がある場合
library(dplyr)
mutate_all(df, list(~na_if(.,"")))
OR
#if data frame other types of character Then
df %>% mutate_if(is.character, list(~na_if(.,"")))
# One Two Three Four
# 1 A A <NA> AAA
# 2 <NA> B BA <NA>
# 3 C <NA> CC CCC
おもちゃのデータ:
df <- data.frame(One=c("A","","C"),
Two=c("A","B",""),
Three=c("","BA","CC"),
Four=c("AAA","","CCC"),
stringsAsFactors = FALSE)
df
# One Two Three Four
# 1 A A AAA
# 2 B BA
# 3 C CC CCC