2017-02-09 9 views
2

Iは、次のコードとRのデータフレームを初期化:Rで数値として指定したデータフレーム列が文字に変わるのはなぜですか?

pcts[nrow(pcts)+1,] <- c(paste(varname,gname,sep="="), btype, pct) 

しかし、私は、関数からのPCT類を返し、成功:

pcts <- data.frame(group=character(), 
      bonus.type=character(), 
      success.rate=double(), 
      stringsAsFactors = FALSE) 

私は次いで、データフレームに行を追加します.rate列は文字値です。数学演算でこの列の値を使用するには、as.double関数またはas.numeric関数を使用する必要があります。これが起こらないように私はコードに加えることができる変更はどれですか?

+0

'のC(ペースト(varnameが、gnameは、9月= "=" )、btype、pct) 'は文字ベクトルです。' paste(varname、gname、sep = "=") 'は文字を返します。私は行の数を設定し、値を記入するために 'c'ではなく' list'を使用してdata.frameを事前に構築することをお勧めします。 'pcts < - data.frame(group = character(500)、bonus.type = character(500)、success.rate =数値(500)、stringsAsFactors = FALSE)'のようなものと 'pcts [nrow(pcts)+ 1、] < - list(ペースト(varname、gname、sep = "=")、btype、pct) '。 – lmo

答えて

1

コマンドの右側をpctsに割り当てずに単独で実行してみてください。

ここでは強制変換が行われます。cはアトミックベクトルを作成します。このアトミックベクトルは1つのタイプしか持てません(ここではすべてがcharacterとして強制されます)。

あなたは(複数のタイプを処理するためのRの中で最も基本的なオブジェクト)の代わりにlistを渡すか、いっそのこと、rbindを使用する必要があります。

pcts = rbind(pcts, data.frame(group = paste(varname,gname,sep="="), 
           bonus.type = btype, 
           success.rate = pct)) 
+0

pctsに割り当てることなく、再度実行するコマンドはどれですか? –

+0

@ M.Riebel c(ペースト(varname、gname、sep = "=")、btype、pct) – MichaelChirico

関連する問題