使用另一个参考数据框更改数据框中的变量类

use*_*412 5 r reference class dataframe data.table

我正在寻找一些方法来改变一个数据框中的变量类,方法是使用另一个数据框的引用,该数据框具有每个变量的类信息.

我有一个包含大约150个变量的数据.所有变量都是字符格式.现在我想根据类型改变每个变量的类.为此,我们创建了一个单独的数据框,其中包含每个变量的类信息.让我用一个示例数据框来解释.

考虑我的原始数据框是df与5个变量 -

df <- data.frame(A="a",B="1",C="111111",D="d",E="e")
Run Code Online (Sandbox Code Playgroud)

现在我们有另一个数据框"variable_info",它只包含2个变量,一个是"variable_name",另一个是"variable_class".

variable_info <- data.frame(variable_name=c("A","B","C","D","E"),variable_class=c("character","integer","numeric","character","character"))
Run Code Online (Sandbox Code Playgroud)

现在使用variable_info数据框我想更改df中每个变量的类,以便它们的类在"variable_info $ variable_class"中指定,将变量名称与"variable_info $ variable_name"链接起来

我们如何为数据框执行此操作?在data.table中执行此操作会很好吗?我们怎样才能在data.table中做到这一点?

谢谢!!

普拉萨德

tal*_*lat 6

你可以这样尝试:

确保两个表的顺序相同:

variable_info <- variable_info[match(variable_info$variable_name, names(df)),]
Run Code Online (Sandbox Code Playgroud)

创建函数调用列表:

funs <- sapply(paste0("as.", variable_info$variable_class), match.fun)
Run Code Online (Sandbox Code Playgroud)

然后将它们映射到每一列:

df[] <- Map(function(dd, f) f(as.character(dd)), df, funs)
Run Code Online (Sandbox Code Playgroud)

你可以用data.table几乎相同的方式做到这一点,只不过你将最后一行替换为:

library(data.table)
dt <- as.data.table(df) # or use setDT(df)
dt[, names(dt) := Map(function(dd, f) f(as.character(dd)), dt, funs)]
Run Code Online (Sandbox Code Playgroud)