【问题标题】:Function to change class of columns in R to match the class of an other dataset用于更改 R 中的列类以匹配其他数据集的类的函数
【发布时间】:2017-04-19 12:27:50
【问题描述】:

我正在尝试编写一个函数来更改数据集中变量的类,以匹配其他数据集的列的类。

例如,如果我有一个数据集 1,其中包含名为 A 的列作为类因子,而数据集 2 的列名为 A 且具有类字符,我想更改数据集中 A 列的类2 因素。

我有一个代码,但我不明白为什么,它无法更改类。你有什么想法吗?

change_class2=function(predict_set,train_set){
  col_drop=c()
  for(column in colnames(predict_set)){
    if(!column %in% colnames(train_set))
    {col_drop=c(col_drop,column)}

v=grep(column, colnames(predict_set))
w=grep(column, colnames(train_set))

if((class(predict_set[,v])!=class(train_set[,w]))*(is.factor(train_set[,w]))==1){
  predict_set[,v]=factor(predict_set[,v])}
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.character(train_set[,w]))==1){
  predict_set[,v]=as.character(predict_set[,v])}
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.numeric(train_set[,w]))==1){
  predict_set[,v]=as.numeric(predict_set[,v])}
else if((class(predict_set[,v])!=class(train_set[,w]))*(is.integer(train_set[,w]))==1){
  predict_set[,v]=as.integer(predict_set[,v])}
else{
  predict_set[,v]=predict_set[,v]}

} }

【问题讨论】:

    标签: r function class


    【解决方案1】:

    您可以使用class 函数将类分配给对象:

    class(predict_set[, v]) <- class(train_set[, w])
    

    更进一步,您可以将列称为字符串而不是它们的索引,这样您就可以取出 vw grep 语句,而只需使用 column

    class(predict_set[, column]) <- class(train_set[, column])
    

    所以大家一起来:

    change_class2 <- function(predict_set, train_set) {
      for (column in colnames(predict_set)) {
        class(predict_set[, column]) <- class(train_set[, column])
      }
    }
    

    【讨论】:

    • @Oolis 很高兴为您提供帮助!如果你能接受这个答案那就太好了
    猜你喜欢
    • 2019-07-02
    • 2018-07-08
    • 1970-01-01
    • 2018-09-06
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2016-12-13
    相关资源
    最近更新 更多