我使用R語言進行編程。我想將我的data.frame對象(mydf
)某些列的格式(類)從字符集更改爲因子。當我通過read.table()
函數讀取文本文件時,我不想這樣做。任何幫助,將不勝感激。將data.frame列格式從字符轉換爲因子
回答
嗨歡迎R.
世界mtcars #look at this built in data set
str(mtcars) #allows you to see the classes of the variables (all numeric)
#one approach it to index with the $ sign and the as.factor function
mtcars$am <- as.factor(mtcars$am)
#another approach
mtcars[, 'cyl'] <- as.factor(mtcars[, 'cyl'])
str(mtcars) # now look at the classes
這也適用於字符,日期,整數和其它類
既然你是新來的R I會建議你有看看這兩個網站:
R參考手冊: http://cran.r-project.org/manuals.html
R參考卡:http://cran.r-project.org/doc/contrib/Short-refcard.pdf
# To do it for all names
df[] <- lapply(df, factor) # the "[]" keeps the dataframe structure
col_names <- names(df)
# do do it for some names in a vector named 'col_names'
df[col_names] <- lapply(df[col_names] , factor)
闡釋。所有的數據幀都是列表,並且與多值參數一起使用的[
的結果同樣也是列表,因此在列表上循環是lapply
的任務。上述分配將創建一組列表的功能data.frame.[<-
應該會成功堅持回成數據幀,df
另一種策略是隻轉換那些列在那裏的唯一項目的數量低於某一標準,讓我們說
cols.to.factor <- sapply(df, function(col) length(unique(col)) < log10(length(col)))
df[ cols.to.factor] <- lapply(df[ cols.to.factor] , factor)
其中任何一個都可以工作。我只是通過嘗試'names < - c('vs','am','gear')來僞造你聲稱它「一定是」的說法。 mtcars [,名稱] < - lapply(mtcars [,names],factor)'..也許你應該更加小心批評你的長輩。 – 2014-02-07 20:17:07
這是一個非常好的解決方案!它也可以處理列號,如果你想改變許多但不是全部,這可能特別有用。例如,col_nums <-c(1,6,7:9,21:23,27:28,30:31,39,49:55,57),則df [,col_nums] < - lapply(df [,col_nums] ,因素)。 – WGray 2014-08-08 17:17:21
警告:如果'length(col_names)== 1',第一個解決方案不起作用。在這種情況下,'df [,col_names]'會自動降級爲一個向量,而不是長度爲1的列表,然後'lapply'嘗試對每個條目進行操作,而不是整個列。這可以通過使用'df [,col_names,drop = FALSE]'來防止。 – 2016-09-11 17:14:07
如果你想改變在data.frame所有字符變量因素,你已經加載數據後,你可以做到這一點:比數行數爲例少像這樣,到一個名爲dat
的數據幀:
character_vars <- lapply(dat, class) == "character"
dat[, character_vars] <- lapply(dat[, character_vars], as.factor)
這產生識別哪些列character
類的載體中,然後應用到as.factor
那些列。
的樣本數據:
dat <- data.frame(var1 = c("a", "b"),
var2 = c("hi", "low"),
var3 = c(0, 0.1),
stringsAsFactors = FALSE
)
當讀取數據時,例如'stringsAsFactors = TRUE',通常會將每個字符變量完全轉換爲因子,但當您從'readxl'讀取數據時使用'read_excel()'讀取數據時非常有用。包並且想要訓練一個不接受字符變量的隨機森林模型。 – 2016-01-07 22:01:18
你可以使用另一種短的路是從magrittr包管道(%<>%
)。它將字符列mycolumn轉換爲一個因子。
library(magrittr)
mydf$mycolumn %<>% factor
請編輯更多信息。僅限代碼和「嘗試這個」的答案是不鼓勵的,因爲它們不包含可搜索的內容,也不解釋爲什麼有人應該「嘗試這個」。我們在這裏努力成爲知識的資源。 – 2016-06-24 11:13:42
請問如果我不想把它用於我的df的所有列? – 2017-01-26 13:50:24
我這樣做的功能。在這種情況下,我只會改變字符變量因素:
for (i in 1:ncol(data)){
if(is.character(data[,i])){
data[,i]=factor(data[,i])
}
}
- 1. 將因子變量轉換爲數字,從數字轉換回因子
- 2. 將字符串轉換爲格式爲
- 3. 將所有列轉換爲data.frame中的字符
- 4. 將Pandas Dataframe列轉換爲R因子
- 5. 轉換列表中的字符串data.frame
- 6. 將散列字符串轉換爲格式化的數字?
- 7. 如何將時間格式從數字轉換爲字符串?
- 8. 我無法將因子列轉換爲R中的數字列
- 9. R:將字符轉換爲R data.frame中的數字
- 10. 將字符串值從服務器格式化爲雙格式轉換爲
- 11. 將列表轉換並格式化爲erlang中的字符串
- 12. 將嵌套列表轉換爲查詢字符串格式?
- 13. Python將格式化的字符串轉換爲列表
- 14. 將C++ printf格式轉換爲VB .NET字符串格式
- 15. 爲什麼ifelse將data.frame轉換爲列表:ifelse(TRUE,data.frame(1),0))!= data.frame(1)?
- 16. 將字符串數組轉換爲JSON格式的字符串
- 17. 將字符串轉換爲SendKeys.Send()格式的字符串
- 18. 將字符串轉換爲哈希字符串:值格式
- 19. 將因子類型的列轉換爲數字R
- 20. android將字符串轉換爲日期格式轉換回字符串
- 21. 將具有特定列名的列從因數轉換爲字符
- 22. 格式化字符串轉換成列
- 23. 將.net格式的字符串轉換爲java格式的字符串
- 24. 如何將.NET標準格式字符串轉換爲Excel格式字符串
- 25. 將data.frame/tibble以分組方式轉換爲列表
- 26. 使用R將字符串轉換爲data.frame
- 27. 無法將字符列轉換爲R中的數據類型因子
- 28. 將字節格式字符串轉換爲字節數組android
- 29. 將字母數字字符串轉換爲整數格式
- 30. 將字符串轉換爲字列表?
是myDF $ myfavoritecolumn < - as.factor(myDF上$ myfavoritecolumn) – 2012-02-12 18:21:25
謝謝!但我有另一個問題。我有一個字符數組col_names []中的每列的名稱。如何使用上述命令(mydf $ col_names [i])不起作用。 – Rasoul 2012-02-12 18:35:59
任何方式自動爲所有字符變量做這件事,因爲data.frame與stringsAsFactors做到了嗎? – 2012-10-25 15:21:05