我有两个数据框,一个具有适当的数据类型但观察较少,而第二个具有大量观察的所有字符列。我想转换第一个匹配列名称的第二个数据框的数据类型。我写了一个函数,当观察数百个时观察效果很好但是当观察数千个时内存不足。请参阅下面的脚本和两个示例数据集。请告知是否可以改善表现。
convert.types <- function(df,types){
for (i in colnames(df)){
FUN <- switch(types[i],character = as.character,
numeric = as.numeric,
integer = as.integer,
logical = as.logical,
factor = as.factor)
if(!is.null(FUN))
df[,i] <- FUN(df[,i])
}
df
}
names <- c("John", "Chris", "David", "April")
ages <- c(30,35,40,45)
salaries <- c(100000,120000,140000,160000)
genders <- c("M","M","M","F")
dataframe.with.types <- data.frame ( Name=names, Age=ages, Salary=salaries, Gender=genders, Region=c("North America"), City=c("Boston", "Newyork"))
dataframe.characters <- data.frame(Name=names, Age=as.character(ages), Salary=as.character(salaries), Gender=as.character(genders), stringsAsFactors = FALSE)
dataframe.converted <- convert.types(dataframe.characters,sapply(dataframe.with.types,class))
第一个数据集dataframe.with.types假设有一些观察结果,但具有适当的数据类型。第二个数据集dataframe.characters预计具有相同名称的列数较少或相等,但观察数可能为数千。在这种情况下,第二个数据集不具有Region和City列。结果数据集dataframe.converted应与第二个完全相同,但具有适当的数据类型。
非常感谢您的建议和反馈。
此致
禾企