2011-08-06 17 views
0

私はcsvファイルをRに読み込み、データのログを取得しようとしています。 CSVファイルには、最初の行にテキストヘッダーと残りの数値データを持つデータの列があります。私はこれを行うときMath.data.frame .....データフレーム内の数値以外の変数:

data<-read.csv("rawdata.csv",header=T) 
trans<-log(csv2) 

は、私は次のエラーを取得する:

Math.data.frame(リスト(収益= cで(18766L、20197L、20777L、23410L、中にエラー: 非数値変数にデータフレームは:?。それが今で提供されていることを考えると構造について削除憶測

データフレーム:私はこれを修正するにはどうすればよい

+0

'str(data)'の出力を表示できますか? – Iterator

+0

'data.frame':167 obs。 3変数: $ X:int 18766 20197 20777 23410 23434 22100 22337 21511 22683 23151 ... $ Y:163レベルの "1,452.70"、 "1,469.00"、:22 9 55 109 158 82 131 112 119 137 ... $ Z:num 564 608 636 790 843 ... –

+1

コメントを投稿するよりも質問を編集する方が便利です。 –

答えて

1

多田! Yは大きな問題です。コンマはそこにあるべきではありません。

また、元の質問にはいくつかの異常があります。dataは読み込まれたdata.frameですが、変換はに適用されます。列の名前を変更しましたか?もしそうなら、あなたは関連するステップの完全な要約を与えていない。とにかく、問題は、2番目の列にカンマがあることです。

2

をEDITコストリストなので、lapplyはそれらの列をループし、それらに対して実行された数学関数を返します。

列が要因である(ここSTR(費用が)あなたを言うだろう)した場合、彼らが要因であるかのように、あなたはすべての列を変換する可能性が非効率的なアプローチを行うことができます:

Costs_logged <- lapply(Costs, function(x) log(as.numeric(as.character(x)))) 
Costs_logged 

(FAQを参照してください。 。数値への因子の変換について)

EDIT2: - など

データ$ Y <:あなたがラベルでコンマで因子変数を変換したい場合は、このメソッドを使用します。

+0

私はこれが正しい軌道にあると思うが、私は次のようなエラーが出ると思う:警告メッセージ:1:FUN(X [[40L]]、...):NAsが導入した強制2:FUN(X [[40L ]、...):強制で導入されたNAs 3:FUN(X [[40L]]、...):強制で導入されたNAsこれは難しいことに私は驚いています。 –

+0

@J M「これ」はどちらを使っていましたか?難しかったのは、str(head(Costs))の結果を投稿しないことでした。第2の戦略は、要素構造と協力しなければなりませんでした。 –

+0

@J Mあなたのデータにカンマの修正を加えます。 –

0

明らかに、列はすべて数値ではありませんので、その列であることを確認してください(つまり、文字列は数値ではありません)。あなたは読まれたとき、すべての列のクラスを強制することでこれを行うことができます。

データ< - read.csv(「rawdata.csv」、colClasses =「数値」)

(read.csvは単なるラッパーですデフォルトではheader = TRUE)

実際にはすべての列がクラスnumericであることを確認します。

彼らが本当に数値列でない場合は、変換したい、あるいは単に個別の列では動作しないものを除外:

x <- data.frame(x = 1:10, y = runif(1, 2, 10), z = letters[1:10]) 

colClassesは「NULL」を指定することで、列を無視するために使用することができます物事を単純化するならば。

個別
log(x[ , 1:2]) 


log(x[ , c("x", "y")]) 

log(x$x) 

log(x$y) 

それは外部ソースから読み出されたデータについての仮定を確認することは常に重要だ「X」と「Y」は最初の2列であるため、

これらは同等です。 。 summary(x)、head(x)、str(x)のような基本的なチェックでは、実際のデータが表示されます。

+0

私は、データ< - read.csv( "rawdata.csv"、colClasses = "数値")を試しましたが、次のエラーが発生しました。(ファイル、what、nmax、sep、dec、quote、skip、nlines、na。文字列、:scan()が '実際に'期待されている '、' 1 'が返される –

+1

ファイル内のすべての列が数値であることは間違いありません。 read.table、?summary、?Rのインポート/エクスポートマニュアルを抽出して読んでください。 – mdsumner

1

問題を引き起こしている変数の最初のいくつかの値を使用できますか? 「コスト」は、変数が(それはあなたの例からどのように見えるか)あなたにトラブルを与えている場合は、このような何かを実行します。

data <- read.csv("rawdata.csv",header=T) 
data[c(1:5),"Costs"] 

、CSVファイル内の値の列を持っているかのようですね - 列Y - 数字にカンマがあります。 、、、、、

X,Y,Z 
"18766","1,452.70","564" 
"20197","1,469.00","608" 

または X、Y 608

または似たような "1,469.00" 564 20197 "1,452.70" Z 18766:それはあなたのcsvファイルは次のようになりますように聞こえる、あります。この場合、問題は列YをカンマでRで簡単に読むことができないということです(たとえ人間が読みやすくしても)。それらのコンマを取り除く必要があります。

X,Y,Z 
18766,1452.70,564 
20197,1469.00,608 

は( - 数字だけ自分自身にカンマを取り除く、あなたはで引用符を残すことができます):つまり、あなたのデータファイルは次のようになります。

これを行うにはいくつかの方法があります。 Excelからデータをエクスポートした場合は、その列のフォーマットを変更してください。または、csvをexcelで開き、タブ区切りファイルとして保存し、お気に入りのテキストエディタでファイルを開き、カンマを検索して削除します(「何も検索して置き換えない」)。

次に元のコマンドでRに戻してみます。

関連する問題