【问题标题】:Lapply while skipping specific columns RLapply 同时跳过特定列 R
【发布时间】:2018-02-21 18:57:42
【问题描述】:

尝试使用以下方法对数据框中的列执行 lapply:

all <- lapply(all, function(x) as.numeric(as.character(x)))

这样做是为了将数据框的默认值从 chr 更改为数字,因为从 excel 导入时的默认值。

有没有办法可以在除特定列之外的所有列上执行此操作? (在这种情况下,请跳过一列并应用到其余列)谢谢。

【问题讨论】:

    标签: r lapply


    【解决方案1】:

    要跳过单个列,您可以执行以下操作:

    all[,-1] <- lapply(all[,-1], function(x) as.numeric(as.character(x)))
    

    【讨论】:

      【解决方案2】:

      向量columns.of.interest 可以是表示数据框中列位置的数值,也可以是由列名组成的字符串。我使用sapply() 返回向量。

      # store columns of interest
      columns.of.interest <- 2:ncol( all )
      
      # filter by columns of interest
      all[ , columns.of.interest ] <- sapply( X = all[ , columns.of.interest ]
                                              , FUN = function(x) as.numeric(as.character(x)))
      

      【讨论】:

      • 你的回答和第一个回答差不多,也是我需要的。感谢您的帮助。
      • 没问题,很高兴为您提供帮助!
      【解决方案3】:

      你为什么不试试apply,你可以这样做:

      col <- c(<specific_columns>)
      
      x[,col] <- apply(x[,col],2,as.numeric)
      

      查看 R 控制台中的 ?apply 了解更多信息。

      【讨论】:

        【解决方案4】:

        您可以使用基础 R 进行原地修改:

        df <- data.frame(a= as.character(1:5),
                         b = as.character(6:10),
                         c = factor(letters[1:5]),
                         stringsAsFactors = FALSE)
        
        # str(df)
        # 'data.frame': 5 obs. of  3 variables:
        # $ a: chr  "1" "2" "3" "4" ...
        # $ b: chr  "6" "7" "8" "9" ...
        # $ c: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
        
        df[-3] <- lapply(df[-3], function(x) as.numeric(as.character(x)))
        
        str(df)
        # 'data.frame': 5 obs. of  3 variables:
        # $ a: num  1 2 3 4 5
        # $ b: num  6 7 8 9 10
        # $ c: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5
        

        或使用库purrr 和使用modify_at 或modify_if 具有相同的效果

        df2 <- purrr::modify_at(df,.at = c("a","b"),~as.numeric(as.character(.)))
        df3 <- purrr::modify_if(df,is.character,~as.numeric(as.character(.)))
        

        【讨论】:

          猜你喜欢
          • 2019-12-21
          • 2021-11-23
          • 2015-10-11
          • 1970-01-01
          • 1970-01-01
          • 2022-06-10
          • 1970-01-01
          • 1970-01-01
          • 2021-10-25
          相关资源
          最近更新 更多