「a.txt」という名前のタブ区切りテキストファイルがあります。 D列は空です。
A B C D
10 20 NaN
30 40
40 30 20
20 NA 20
2番目の行と2番目の列にスペースを入れて、データフレームをテキストファイルとまったく同じように表示および動作させたいと思います。
残念ながら、read.csvはすべての空白とNAを「NA」に変換しています。 NAとNaNを文字として読みたいです。
b<- read.csv("a.txt",sep="\t", skip =0, header = TRUE, comment.char = "",check.names = FALSE, quote="", )
要約すると、出力ファイルの同じ値を変更せずに複製したい:
Csvファイルを読んだ後、次を試してください。 NA値を「」に置き換えます。
b[is.na(b)]<-""
NaN値が修正されないことはかなり確かです。それは別のステートメントで解決する必要があります
b[is.nan(b)]<-""
Na.stringsのデフォルトは単なる「NA」なので、おそらく「NaN」を追加する必要があります。真の空白( "")は欠落に設定されますが、スペース( "")はそうではありません。
b<- read.csv("a.txt", skip =0,
comment.char = "",check.names = FALSE, quote="",
na.strings=c("NA","NaN", " ") )
データ例の形式が正しくなく、コンマがないため、これが問題であることは明らかではありません。 read.csvではタブ区切りが許可されていないため、これが根本的な問題になる可能性があります。つかいます read.delim
またはread.table
データにタブ区切りがある場合。
b<- read.table("a.txt", sep="\t" skip =0, header = TRUE,
comment.char = "",check.names = FALSE, quote="",
na.strings=c("NA","NaN", " ") )
# worked example for csv text file connection
bt <- "A,B,C
10,20,NaN
30,,40
40,30,20
,NA,20"
b<- read.csv(text=bt, sep=",",
comment.char = "",check.names = FALSE, quote="\"",
na.strings=c("NA","NaN", " ") )
b
#--------------
A B C
1 10 20 NA
2 30 NA 40
3 40 30 20
4 NA NA 20
例2:
bt <- "A,B,C,D
10,20,NaN
30,,40
40,30,20
,NA,20"
b<- read.csv(text=bt, sep=",",
comment.char = "",check.names = FALSE, quote="\"",
na.strings=c("NA","NaN", " ") , colClasses=c(rep("numeric", 3), "logical"))
b
#----------------
A B C D
1 10 20 NA NA
2 30 NA 40 NA
3 40 30 20 NA
4 NA NA 20 NA
> str(b)
'data.frame': 4 obs. of 4 variables:
$ A: num 10 30 40 NA
$ B: num 20 NA 30 NA
$ C: num NA 40 20 20
$ D: logi NA NA NA NA
NAとNaNが数値ベクトルで同一ではないことは少し興味深いです。 NaNは、数学的な意味を持たない操作によって返されます(ただし、?NaN
、操作の結果は特定のOSに依存する場合があります。同等性のテストは、NaNまたはNAのいずれにも適していません。特定のis
関数があります:
> Inf*0
[1] NaN
> is.nan(c(1,2.2,3,NaN, NA) )
[1] FALSE FALSE FALSE TRUE FALSE
> is.na(c(1,2.2,3,NaN, NA) )
[1] FALSE FALSE FALSE TRUE TRUE # note the difference
read.csv
ステートメントでcolClasses
を指定して、列をテキストとして読み取ることができます。
Na.string引数を使用します。
na.stringは、データからna値として読み取られる引数を定義するために使用されます。あなたが言及した場合
read.csv(text=bt, na.string = "abc")
データのどこでもabcになり、naに変換されます。
abcはデータに見つからないため、値をnaに変換しません。