代码之家  ›  专栏  ›  技术社区  ›  Joachim Schork

在for循环中分配不同的类

  •  3
  • Joachim Schork  · 技术社区  · 10 年前

    我想编写一个for循环,在这个循环中,我需要转换数据的某些列的类。帧到字符优先。经过一些操作(与此问题无关)后,我需要将列转换回其原始类。

    列到其原始类的转换必须在for循环中完成。我怎么能那样做?

    以下是一些数据和循环示例:

    # Example data
    data <- data.frame(x1 = as.numeric(1:5), x2 = as.factor(7:3))
    
    for(i in 1:ncol(data)) {
    
      # Save original class.
      class_col_i <- class(data[ , i])
    
      # Convert column as character.
      data[ , i] <- as.character(data[ , i])
    
      # (Here I will do some operations, which are irrelevant for this problem.)
    
      # Here I need to convert the column back to its original class.
      # How can I do that?
    
      # data[ , i] <- class_col_i... ???
    }
    
    class(data$x1) # This should be a numeric
    class(data$x2) # This should be a factor
    
    2 回复  |  直到 10 年前
        1
  •  3
  •   zx8754    10 年前

    使用 match.fun ,请参见此示例:

    #dummy data
    d <- mtcars
    class(d$gear)
    # [1] "numeric"
    
    #change to character
    classOrg <- class(d$gear)
    d$gear <- as.character(d$gear)
    class(d$gear)
    # [1] "character"
    
    #do some fun stuff
    # ... d$gear 
    
    #convert it back
    myConvertFun <- match.fun(paste0("as.", classOrg))
    d$gear <- myConvertFun(d$gear)
    class(d$gear)
    # [1] "numeric"
    
        2
  •  0
  •   Bryan Goggin    10 年前

    试试这个:

    data <- data.frame(x1 = as.numeric(1:5), x2 = as.factor(7:3))
    class_col<-NULL
    for(i in 1:ncol(data)) {
    
    # Save original class.
    class_col[i] <- class(data[ , i])
    
    # Convert column as character.
    data[ , i] <- as.character(data[ , i])
    
    # (Here I will do some operations, which are irrelevant for this    
    #problem.)
    
    # Here I need to convert the column back to its original class.
    # How can I do that?
    
    class(data[ , i]) <- class_col[i]
    }
    
    class(data$x1) # This should be a numeric
    class(data$x2)
    
    推荐文章