【问题标题】:Batch Convert Columns from chr to num with either read_excel or dplyr使用 read_excel 或 dplyr 将列从 chr 批量转换为 num
【发布时间】:2021-06-18 15:06:50
【问题描述】:

我有一个保存在 excel 中的数据库,当我将它带入 R 时,有很多列应该是数字,但它们被列为字符。我知道在 read_excel 中我可以使用 col_types = "numeric" 指定每个列格式,但我有 > 500 列,所以这有点乏味。

在使用 read_excel 导入时,或在使用 dplyr 或类似的东西导入后如何做到这一点有什么建议吗?

我可以使用我编写的函数逐个执行此操作,但仍然需要写出每个列名

convert_column <- function(data, col_name) {
  new_col_name <- paste0(col_name)
  data %>% mutate(!!new_col_name := as.numeric(!!sym(col_name)))
}

  convert_column("gFat_OVX") %>%
  convert_column("gLean_OVX")%>%
  convert_column("pFat_OVX") %>%
  convert_column("pLean_OVX")

理想情况下,我想说“如果列的标题中包含文本“Fat”或“Lean”,则转换为数字”,但我愿意接受建议。

select(df, contains("Fat" | "Lean"))

鉴于我们从这里的 Excel 表开始,我不确定如何制作一个示例来让人们对此进行测试。

【问题讨论】:

  • 试试df %&gt;% mutate_if(is.character, as.numeric),如果遇到任何字符col,这会将所有列更改为数字
  • 这非常接近 - 它会将所有内容更改为数字(或者如果我先使用“select”,那么我会丢失我想要的其他字符列)我可以以某种方式将 mutate_if 与其他内容结合起来吗?即df %&gt;% mutate_if(select(contains ("Fat")) &amp; is.character, as.numeric) --虽然我试过了,但它不起作用

标签: r dplyr numeric chr


【解决方案1】:

dplyr::mutateacross可能是读入数据后的解决方案。

类似这样,其中df1 是来自read_excel 的数据框:

library(dplyr)

df1 <- df1 %>% 
  mutate(across(contains(c("Fat", "Lean")), ~as.numeric(.x)))

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 2023-03-06
    • 2014-04-26
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-23
    相关资源
    最近更新 更多