从第二个数据帧更改一个数据帧的数据类型

时间:2016-02-04 12:24:55

标签: r optimization dataframe type-conversion

我有两个数据框,一个具有适当的数据类型但观察较少,而第二个具有大量观察的所有字符列。我想转换第一个匹配列名称的第二个数据框的数据类型。我写了一个函数,当观察数百个时观察效果很好但是当观察数千个时内存不足。请参阅下面的脚本和两个示例数据集。请告知是否可以改善表现。

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应与第二个完全相同,但具有适当的数据类型。

非常感谢您的建议和反馈。

此致

禾企

0 个答案:

没有答案