如何防止数据框列被归类为字符而不是数字

PJP*_*PJP 3 r dataframe

早上好.

我骑自行车浏览一些数据,随时建立一个数据帧.每次我在数据框中添加或替换一行时,数值都会被归类为字符,我必须重新对它们进行分类.我假设在将数据添加到数据帧时我做错了什么?

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  
Run Code Online (Sandbox Code Playgroud)

将数字列转换为数字:

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  
Run Code Online (Sandbox Code Playgroud)

所以数据帧现在正如我所料 - 1列字符数据和2列数字.但是,如果我再次更改其中一行:

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  
Run Code Online (Sandbox Code Playgroud)

它已经回到了所有角色!

有没有办法确保当我在数据框中追加/更改数据时它保留了适当的类?

谢谢,皮特

Rol*_*and 6

cbind("A",5,360) 是一个矩阵,它只能容纳一种类型,即你的情况下的字符.

使用data.frame方法:

cbind.data.frame("A",5,360)
Run Code Online (Sandbox Code Playgroud)

但是,"循环访问某些数据"可能是在R中执行此操作的最低效方法.