Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
函数更改R中列的类以匹配其他数据集的类_R_Function_Class - Fatal编程技术网

函数更改R中列的类以匹配其他数据集的类

函数更改R中列的类以匹配其他数据集的类,r,function,class,R,Function,Class,我试图编写一个函数来更改数据集中变量的类,以便与其他数据集中列的类相匹配 例如,如果我有一个数据集1,其中一列名为a,作为类因子,而数据集2有一个列名为a,具有类字符,那么我想将数据集2中列a的类更改为因子 我有一个代码,但我不明白为什么,它无法更改类。你知道吗 change_class2=function(predict_set,train_set){ col_drop=c() for(column in colnames(predict_set)){ if(!column %

我试图编写一个函数来更改数据集中变量的类,以便与其他数据集中列的类相匹配

例如,如果我有一个数据集1,其中一列名为a,作为类因子,而数据集2有一个列名为a,具有类字符,那么我想将数据集2中列a的类更改为因子

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

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]}
}
}

您可以使用
class
功能将类指定给对象:

class(predict_set[, v]) <- class(train_set[, w])
因此,总而言之:

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

change\u class2@ool很乐意帮忙!如果你能接受这个答案,那就太好了
change_class2 <- function(predict_set, train_set) {
  for (column in colnames(predict_set) {
    class(predict_set[, column]) <- class(train_set[, column])
  }
}