2017-08-09 28 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'函数,但是没有成功。谢谢 –

相关问题