3

おはようございます。

いくつかのデータを循環させながら、データフレームを構築しています。データフレームの行を追加または置換するたびに、数値が文字として分類され、再分類する必要があります。データをデータフレームに追加するときに何か間違ったことをしていると思いますか?

test.df<-data.frame(SIDE=rep("",5),n=rep(NA, 5),c1=rep(NA,5),stringsAsFactors=FALSE)
test.df[1,]<-cbind("A",1,256)
test.df[2,]<-cbind("A",2,258)
test.df[3,]<-cbind("A",3,350)
test.df[4,]<-cbind("A",4,400)
test.df[5,]<-cbind("A",5,360)
summary(test.df)
 SIDE                n                  c1           
  Length:5           Length:5           Length:5          
  Class :character   Class :character   Class :character  
  Mode  :character   Mode  :character   Mode  :character  

数値列を数値に変換します。

test.df[, c(2:3)] <- sapply(test.df[, c(2:3)], as.numeric)
summary(test.df)
 SIDE                 n           c1       
 Length:5           Min.   :1   Min.   :256.0  
 Class :character   1st Qu.:2   1st Qu.:258.0  
 Mode  :character   Median :3   Median :350.0  
                    Mean   :3   Mean   :324.8  
                    3rd Qu.:4   3rd Qu.:360.0  
                    Max.   :5   Max.   :400.0  

したがって、データフレームは期待どおりになりました.1列の文字データと2列の数値です。ただし、行の 1 つを再度変更すると、次のようになります。

test.df[5,]<-cbind("A",5,360)
summary(test.df)
 SIDE                n                  c1           
 Length:5           Length:5           Length:5          
 Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character  

それはすべての文字に戻りました!

データフレームにデータを追加/変更するときに、適切なクラスを保持するようにする方法はありますか?

ありがとう、ピート

4

3 に答える 3

6

cbind("A",5,360)1つのタイプ、つまりあなたの場合は文字のみを保持できるマトリックスです。

data.frame メソッドを使用します。

cbind.data.frame("A",5,360)

ただし、「一部のデータを循環させる」ことは、おそらく R でこれを行う最も効率の悪い方法です。

于 2013-08-05T07:04:18.517 に答える
4

マトリックスを組むと全部同じモードなので、これcbind("A",1,256)は全部キャラモード。(cbind.data.frame 関数がありますが、cbind への引数はどれも data.frames ではなかったので、呼び出されませんでした。これを行うこともできました:

test.df<-data.frame(SIDE="A",n=1,c1=256,stringsAsFactors=FALSE)
test.df<- rbind( test.df,
                  list("A",2,258),
                  list("A",3,350),
                  list("A",4,400),
                  list("A",5,360) )
 test.df
#---------------    
  SIDE n  c1
1    A 1 256
2    A 2 258
3    A 3 350
4    A 4 400
5    A 5 360
于 2013-08-05T07:05:08.300 に答える
1

同様の問題が発生しましたが、最も簡単な方法(私が思うに)は設定することですoptions(stringsAsFactors=FALSE)

于 2016-06-08T15:11:11.767 に答える