在不丢失 类 的情况下降低数据 table 中的所有值

Make all the the values in a data table to lower without losing the classes

我想转换数据 table 中的所有值而不丢失它们的 class。

使用 iris 数据集的示例

  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  

但是,这些尝试中没有一个能够保持每列的 class。此外,我正在丢失属性以防它们存在。

简而言之,有什么方法可以在 数据 table 中使用 lapply 而无需丢失每列的特征(class,属性)?

因为 iris 中的所有数据都是小写的,所以我使用了 toupper 而不是 tolower 这样你就可以看到发生了什么。使用 tolower 应该给出适当数据的预期结果:

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

如果有帮助,请告诉我们。