2010-12-01 14 views
7

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

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

+0

これは、「レベル」の意味に応じて、いくつかのことを意味します。あなたの数字が因子変数に変換されたように聞こえるのは、ひどく形成された数なので、Rはそれをすべてカテゴリの '因子'変数に変換するからです。正確なコードとエラーメッセージをここでカットアンドペーストできますか? – Spacedman

+0

'?factor'は読んでいますか?または「?レベル」 – Marek

+0

setwd( "D:/ users/me/Desktop") data < - read.csv( "Rdata.csv") attach(data) ctr < - for(i in 1:4722) \t \t {as.integer(a [i]/b [i])} – user446667

答えて

1

正常に読み込まれたことを確認する要約(データ)を表示しますか。列が数値でない場合は、read.csvのcolClasses引数を参照して強制的に実行します。これにより、整形されていない数値のNA値が生成される可能性があります。

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

+0

Spacedman:colClassesを使用できますかNAを強制するには?最初はそうだが、txt < - c( "x、y、z"、 "1,2,3"、 "a、b、c"、 "1,2,3")と思った。スキャン時にd < - read.table(textConnection(txt)、sep = "、"、header = TRUE、colClasses = rep( "numeric"、3))エラーが発生しました。 read.tableにないものがありますか? – mdsumner

+0

@mdsummer:これらの二重引用符を取り出します。彼らはあなたが意図していない方法であなたのキャラクターを束ねています。 –

+0

@mdsummer:しかし、問題はとにかく続きました。 as.is = TRUEが必要です。 –

8

read.table(またはread.csv? - 指定しなかった)でデータを読み込むときに、stringsAsAsactor = 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の "Warning"によるas.numeric(levels(d $ x))[d $ x]あなたの明確化から作業

+0

ウォークスルーありがとう! –

4

私は "" あなたはread.tableをヘッダ= TRUE、stringAsFactors = FALSEとas.is = stringsAsFactorsと9月=を使用して読み取りステートメントをやり直し勧め!

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 
5

か単純に使用できます

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