2016-08-11 40 views
0

我正在嘗試創建一個R dataFrame,其中一些列將被視爲因子和其他字符串。在數據框中混合`stringsAsFactors`

fruits <- data.frame(fruit = character(), descr = character()) 
fruits <- rbind(fruits, data.frame(fruit = "apple", descr = "jjrkgnser")) 
fruits <- rbind(fruits, data.frame(fruit = "apple", descr = "aprtgh")) 
fruits <- rbind(fruits, data.frame(fruit = "pear", descr = "akjreg")) 

這裏既有列被視爲因素,我結束了與許多因素的descr列,還有在fruits數據幀行。

descr如何被視爲字符串,但fruit作爲因素? 如果我使用stringsAsFactors = FALSE它適用於所有列!

編輯

我砍死這個解決方案,而不是那麼優雅:

fruits <- data.frame(fruit = factor(), path = character(), stringsAsFactors = FALSE) 
fruits <- rbind(fruits, data.frame(fruit = factor("apple"), path = "jjrkgnser", stringsAsFactors = FALSE)) 
fruits <- rbind(fruits, data.frame(fruit = factor("apple"), path = "aprtgh", stringsAsFactors = FALSE)) 
fruits <- rbind(fruits, data.frame(fruit = factor("pear"), path = "akjreg", stringsAsFactors = FALSE)) 

> str(fruits) 
'data.frame': 3 obs. of 2 variables: 
$ fruit: Factor w/ 2 levels "apple","pear": 1 1 2 
$ path : chr "jjrkgnser" "aprtgh" "akjreg" 

符合要求。有沒有更好的的方式?

+2

使用命令如果需要的話,對每一列分別'as.factor'和'as.character'。 – AntoniosK

+2

你使用'rbind'作爲腳本的一部分嗎?爲什麼不一次創建整個數據集?像'fruits < - data.frame(fruit = c(「apple」,「apple」,「pear」),descr = I(c(「jjrkgnser」,「aprtgh」,「akjreg」)))''。你的代碼既過度複雜又低效,因爲它在不預先分配內存的情況下正在增長對象 –

+0

@AntoniosK你會介意發佈它作爲答案嗎?我無法弄清楚如何。 –

回答

1
# creating the dataset (no usage of rbind if possible) with factor columns by default 
fruits <- data.frame(fruit = c("apple", "apple", "pear"), 
        path = c("jjrkgnser", "aprtgh", "akjreg")) 

# transform this column to a character vector 
fruits$path = as.character(fruits$path) 
+0

好,謝謝!即使我的成長對象也適用。 –

1

我不確定您是否使用rbind作爲說明性示例或作爲用例(以這種方式擴展數據會導致內存效率低下),但假設它是必需的,那麼您可以使輸入多一點簡約使用data_frametibble包(在dplyr等生態系統包)

library(tibble) 
fruits <- data_frame(fruit = factor(), descr = character()) 
fruits <- rbind(fruits, data_frame(fruit = factor("apple"), descr = "jjrkgnser")) 
fruits <- rbind(fruits, data_frame(fruit = factor("apple"), descr = "aprtgh")) 
fruits <- rbind(fruits, data_frame(fruit = factor("pear"), descr = "akjreg")) 
+0

不錯的解決方案,我會記住我自己的用法。我的生產環境有dplyr 0.4.3,並且還沒有發佈tibble。我沒有完全控制它,寧願保持依賴關係。 –