2017-08-09 59 views
0

我想將數據表中的所有值轉換而不丟失其類。使數據表中的所有值降低而不丟失類

使用所述 虹膜數據

實施例設置

library(datasets) 
    library(dplyr) 
    data(iris) 

    iris <- iris %>% as.data.table() 
    iris[2:3, 5] <- "SeToSa" 

    iris %>% str 

    iris2 <- copy(iris) 
    iris <- iris[, lapply(.SD, function(x)(tolower(x)))] 

iris2 <- iris2[, lapply(.SD, function(x)(ifelse(is.factor(x), tolower(x), x)))] 

    iris %>% str 

然而,這些嘗試的非能夠維持類中每個列的。另外,如果它們存在,我正在失去屬性。

總之,就是有,我們可以使用lapply數據表不失特性的任何方式(類,屬性),每列的?

+1

如果這是你需要做的一個因素'tolower(levels(x))' –

+1

你的問題不是關於data.table。爲什麼你在你的問題中使用dplyr也是一個謎題(你正在減少可能的答案)。你的問題是關於'tolower',它被記錄爲返回類字符向量,以及如何將它應用於因子變量的水平。 – Roland

+0

他可能已經添加了'dplyr'包以便能夠使用'pipe operator'。儘管一個謹慎。將「tolower」函數應用於因子水平只會改變因子水平。這將爲所創建的新關卡返回「NA」。最好的選擇是處理字符並將其改變爲因素:'factor(tolower(x))' – Onyambu

回答

0

由於我在虹膜中的全部數據都是小寫字母,因此我使用toupper而不是tolower,以便您可以看到會發生什麼情況。使用tolower應該給予預期的結果給出相應的數據:

lapply(iris,function(x) if(is.factor(x)) factor(toupper(x)) else(x)) 

請讓我們知道,如果這有助於。

+0

這就是我一直在尋找的!之前,我嘗試過使用數據表括號[]中的'ifelse'函數,但是沒有成功。謝謝 –