在不丢失 类 的情况下降低数据 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))
如果有帮助,请告诉我们。
我想转换数据 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))
如果有帮助,请告诉我们。