2013-06-03 66 views
6

在R中創建數據框時,字符串默認轉換爲因子(我不介意)。但是當我想爲我的數據框創建一個新行時,我找不到一種將字符串編碼爲一個因子的方法。如果我使用factor(),字符串將轉換爲數字,但仍不是一個因素。在任何一種情況下,我都無法將新行添加到數據框中,因爲新行不是一個因素。我想要的是讓我的新行像我的數據框一樣行爲,即將字符串轉換爲一個因子。字符串作爲R中的因子

> data.frame(c("Name one", "Name two")) -> my.data 
> colnames(my.data) <- "Names" 
> is.factor(my.data$Names) 
[1] TRUE 
> new.row1 <- c("Name three") 
> is.factor(new.row1)[1] 
[1] FALSE 
> new.row2 <- c(factor("Name three")) 
> new.row2 
[1] 1 
> is.factor(new.row2)[1] 
[1] FALSE 
> rbind(my.data, new.row1) 
    Names 
1 Name one 
2 Name two 
3  <NA> 
Warning message: 
In `[<-.factor`(`*tmp*`, ri, value = "Name three") : 
    invalid factor level, NA generated 
> rbind(my.data, new.row2) 
    Names 
1 Name one 
2 Name two 
3  <NA> 
Warning message: 
In `[<-.factor`(`*tmp*`, ri, value = 1L) : 
    invalid factor level, NA generated 
> 
+2

請注意'c'刪除所有屬性。因此,它將一個因子轉換爲整數。 – Roland

回答

10

訣竅是隻rbind一個data.frame與另一data.frame,而不是像你所做的一切,用一個簡單的vector

my.data <- data.frame(Names = c("Name one", "Name two")) 
new.row1 <- data.frame(Names = c("Name three")) 
rbind(my.data, new.row1) 

##  Names 
## 1 Name one 
## 2 Name two 
## 3 Name three 
1

也許這樣的事情是要幫你?

data.frame(c("Name one", "Name two")) -> my.data 
colnames(my.data) <- "Names" 

rbind(my.data, data.frame(Names="name three"))