0

我想在不丢失类的情况下转换数据表中的所有值。

使用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  

但是,这些尝试中没有一个能够维护每列的类。此外,如果它们存在,我会丢失属性。

简而言之,有没有什么方法可以让我们在数据表中使用lapply而不会丢失每一列的特征(类、属性)?

4

1 回答 1

1

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

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

请让我们知道这是否有帮助。

于 2017-08-09T08:39:49.357 回答