7

.csv ファイルからデータをインポートし、データセットを添付しました。
私の問題: 1 つの変数が整数形式で、295 のレベルがあります。この変数を使用して他の変数を作成する必要がありますが、レベルの処理方法がわかりません。

これらは何ですか、どうすれば対処できますか?

4

4 に答える 4

8

read.table (または read.csv? - 指定しなかった) を使用してデータを読み込む場合は、引数 stringsAsFactors = FALSE を追加します。次に、代わりに文字データを取得します。

列に整数が必要な場合は、整数として解釈できないデータが必要になるため、読み取り後に数値に変換してください。

txt <- c("x,y,z", "1,2,3", "a,b,c")

d <- read.csv(textConnection(txt))
sapply(d, class)
       x        y        z 
##"factor" "factor" "factor" 

## we don't want factors, but characters
d <- read.csv(textConnection(txt), stringsAsFactors = FALSE)
sapply(d, class)

#          x           y           z 
#"character" "character" "character" 

## convert x to numeric, and wear NAs for non numeric data
as.numeric(d$x)

#[1]  1 NA
#Warning message:
#NAs introduced by coercion 

最後に、これらの入力の詳細を無視して因子から整数レベルを抽出する場合は、?factor の「警告」に従って、as.numeric(levels(d$x))[d$x] などを使用します。

于 2010-12-01T22:38:31.547 に答える
5

または、単に使用できます

d$x2 = as.numeric(as.character(d$x)).

于 2010-12-03T14:10:25.677 に答える
4

あなたの明確化に基づいて、read.table と header=TRUE、stringAsFactors=FALSE および as.is = !stringsAsFactors と sep="," を使用して read ステートメントをやり直すことをお勧めします。

datinp <- read.table("Rdata.csv", header=TRUE, stringAsFactors=FALSE , 
                       as.is = !stringsAsFactors , sep=",") 
datinp$a <- as.numeric(datinp$a)
datinp$b <- as.numeric(datinp$b)
datinp$ctr <- with(datinp, as.integer(a/b) ) # no loop needed when using vector arithmetic
于 2010-12-01T22:46:33.767 に答える
1

summary(data)を実行して、正しく読み込まれたことを確認します。列が本来あるべき数値でない場合は、read.csvのcolClasses引数を調べて強制します。これにより、形式の悪い数値のNA値も発生する可能性があります。

help(read.csv)が役立ちます。

于 2010-12-01T22:34:28.623 に答える