在 R 中用 data.table 重新格式化多个变量
reformat multiple variables with data.table in R
所以我有一个包含数千个变量的数据 table。数据无论如何都不是很干净,所以我 运行 下面的代码从我的 dt
中删除所有 -
和 -
系列。
dt <- as.data.table(lapply(dt, function(x) {
gsub("-+", "", x)
}))
然而,此代码 t运行s 将所有列转换为 character
向量。如果可能的话,我想将所有变量重新格式化为它们的原始 class
以及 class
character
中的任何变量为数字(因此在变量为数字但具有至少有一个在某处带有 -
的观察结果,例如 123-
.
这可以通过 fwrite()
然后 fread()
来完成,但我想避免编写临时文件只是为了将其重新导入到同一会话,因为这会占用存储空间和时间.
示例:
假设您有以下数据:
library(data.table)
dt <- data.table(nums = 11:20,
char_nums = c(as.character(1:9), "10-"),
letters = letters[1:10])
# nums is of class integer, char_nums is of class character
str(dt)
目标是删除所有 -
系列,并让 nums
和 char_nums
属于 class
integer
,同时保留 class
character
个 letters
。
如果我们使用data.table,我们可以遍历Data.table的子集(.SD
library(data.table)
dt1 <- dt[, lapply(.SD, gsub, pattern = '-+', replacement = "")]
dt1 <- type.convert(dt1, as.is = TRUE)
str(dt1)
#Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables:
#$ nums : int 11 12 13 14 15 16 17 18 19 20
#$ char_nums: int 1 2 3 4 5 6 7 8 9 10
#$ lett : chr "a" "b" "c" "d" ...
或在删除 -
后使用 as.numeric
dt1 <- dt[, lapply(.SD, function(x) as.numeric(gsub("-+", "", x)))]
但是,只有当我们确定所有列通常都是 numeric
类型时,我们才会这样做,但由于 -
而被更改
所以我有一个包含数千个变量的数据 table。数据无论如何都不是很干净,所以我 运行 下面的代码从我的 dt
中删除所有 -
和 -
系列。
dt <- as.data.table(lapply(dt, function(x) {
gsub("-+", "", x)
}))
然而,此代码 t运行s 将所有列转换为 character
向量。如果可能的话,我想将所有变量重新格式化为它们的原始 class
以及 class
character
中的任何变量为数字(因此在变量为数字但具有至少有一个在某处带有 -
的观察结果,例如 123-
.
这可以通过 fwrite()
然后 fread()
来完成,但我想避免编写临时文件只是为了将其重新导入到同一会话,因为这会占用存储空间和时间.
示例:
假设您有以下数据:
library(data.table)
dt <- data.table(nums = 11:20,
char_nums = c(as.character(1:9), "10-"),
letters = letters[1:10])
# nums is of class integer, char_nums is of class character
str(dt)
目标是删除所有 -
系列,并让 nums
和 char_nums
属于 class
integer
,同时保留 class
character
个 letters
。
如果我们使用data.table,我们可以遍历Data.table的子集(.SD
library(data.table)
dt1 <- dt[, lapply(.SD, gsub, pattern = '-+', replacement = "")]
dt1 <- type.convert(dt1, as.is = TRUE)
str(dt1)
#Classes ‘data.table’ and 'data.frame': 10 obs. of 3 variables:
#$ nums : int 11 12 13 14 15 16 17 18 19 20
#$ char_nums: int 1 2 3 4 5 6 7 8 9 10
#$ lett : chr "a" "b" "c" "d" ...
或在删除 -
as.numeric
dt1 <- dt[, lapply(.SD, function(x) as.numeric(gsub("-+", "", x)))]
但是,只有当我们确定所有列通常都是 numeric
类型时,我们才会这样做,但由于 -