2012-09-27 30 views
1

我有以下代碼as.numeric VS CHR

fig4 <- data.frame(chads=NA,age=NA,treatment=NA,mean=NA,lower=NA,upper=NA) 
fig4$chads <- as.factor(fig4$chads) 
levels(fig4$chads) <- c(0,1,2,3,4,5,6) 
fig4$age <- as.factor(fig4$age) 
levels(fig4$age) <- c("u80","o80") 
fig4$treatment <- as.factor(fig4$treatment) 
levels(fig4$treatment) <- c("OAC","OAP") 
fig4$mean <- as.numeric(fig4$mean) 
fig4$lower <- as.numeric(fig4$lower) 
fig4$upper <- as.numeric(fig4$upper) 

> str(fig4) 
'data.frame': 1 obs. of 6 variables: 
$ chads : Factor w/ 7 levels "0","1","2","3",..: NA 
$ age  : Factor w/ 2 levels "u80","o80": NA 
$ treatment: Factor w/ 2 levels "OAC","OAP": NA 
$ mean  : num NA 
$ lower : num NA 
$ upper : num NA 

到目前爲止好。但後來我這樣做:

vc <- as.vector(c(6,"o80","OAC",0.1,0.02,0.25), mode = "any") 
fig4 <- rbind(fig4,vc) 

導致此:

> str(fig4) 
'data.frame': 2 obs. of 6 variables: 
$ chads : Factor w/ 7 levels "0","1","2","3",..: NA 7 
$ age  : Factor w/ 2 levels "u80","o80": NA 2 
$ treatment: Factor w/ 2 levels "OAC","OAP": NA 1 
$ mean  : chr NA "0.1" 
$ lower : chr NA "0.02" 
$ upper : chr NA "0.25" 

爲什麼數字矢量變成性格的人?

回答

3

列表可以容納多種類型的對象,所以要避免新的數據被轉換爲字符,你可以這樣做:

fig4[nrow(fig4) + 1, ] <- list(6,"o80","OAC",0.1,0.02,0.25) 
2

出於同樣的原因,一個矩陣將---矢量和矩陣都只能容納一個類型。而當你強調角色混合,你會得到性格。

使用data.frame來保存不同類型的「列」,然後使用單個列的子集。