web-dev-qa-db-ja.com

Rデータフレームのレベル

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

これらは何ですか、そしてどのように対処しますか?

7
user446667

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 

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

8
mdsumner

または単に使用することができます

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

5
Arthur

明確化に基づいて、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
4
42-

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

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

1
Spacedman