【问题标题】:Using dplyr, Remove all strings from a data frame使用 dplyr,从数据框中删除所有字符串
【发布时间】:2018-03-12 04:29:09
【问题描述】:

我有一个包含 300 列的数据框,其中有一个字符串变量,我试图删除它。我使用lapply(见下文)在堆栈溢出中找到了这个解决方案,这是我想要做的,但使用dplyr 包。我曾尝试使用 mutate_each 函数,但似乎无法使其工作

“如果您的数据框 (df) 真的是除 NAs 和垃圾之外的所有整数,那么以下将对其进行转换。

df2 <- data.frame(lapply(df, function(x) as.numeric(as.character(x))))

您会收到关于强制引入的 NA 的警告,但这只是所有非数字字符串变成 NA。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    dplyr 0.5 现在包含select_if() 函数。 例如:

    person <- c("jim", "john", "harry")
    df <- data.frame(matrix(c(1:9,NA,11,12), nrow=3), person)
    
    library(dplyr)
    df %>% select_if(is.numeric)
    
    #  X1 X2 X3 X4
    #1  1  4  7 NA
    #2  2  5  8 11
    #3  3  6  9 12
    

    当然,如果需要,您可以添加更多条件。

    【讨论】:

      【解决方案2】:

      如果要使用这行代码:

      df2 <- data.frame(lapply(df, function(x) as.numeric(as.character(x))))
      

      使用dplyr(我假设您的意思是“使用管道”)最简单的方法是

      df2 = df %>% lapply(function(x) as.numeric(as.character(x))) %>%
          as.data.frame
      

      将其“翻译”成mutate_each 成语:

      mutate_each(df, funs(as.numeric(as.character(.)))
      

      当然,此函数会将所有列转换为字符,然后再转换为数字。为了提高效率,不要费心对已经是数字的列进行两次转换:

      mutate_each(df, funs({
          if (is.numeric(.)) return(.)
          as.numeric(as.character(.))
      }))
      

      测试数据:

      df = data.frame(v1 = 1:10, v2 = factor(11:20))
      

      【讨论】:

        【解决方案3】:

        mutate_all 在这里工作,只需将 gsub 包装在一个函数中。 (我还假设您不一定是字符串搜索,而是非整数的拖网。

        StrScrub <- function(x) {
            as.integer(gsub("^\\D+$",NA, x))
            }
        ScrubbedDF <- mutate_all(data, funs(StrScrub))
        

        示例数据框:

        library(dplyr)
        options(stringsAsFactors = F)
        data = data.frame("A" = c(2:5),"B" = c(5,"gr",3:2), "C" = c("h", 9, "j", "1"))
        

        来自Tony Ladson的参考/帮助

        【讨论】:

          猜你喜欢
          • 2011-03-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-11-08
          • 2018-09-10
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多