代码之家  ›  专栏  ›  技术社区  ›  Prevost

使用readr中的read\u CSV导入标题中带有空格的CSV文件

  •  1
  • Prevost  · 技术社区  · 7 年前

    readr 要导入CSV文件,请使用 read_csv ...如何处理头文件名中包含空格的CSV文件?

    读取csv 用空格(和特殊字符)导入它们,这会阻止我直接访问 mutate 和其他 dplyr

    2 回复  |  直到 7 年前
        1
  •  2
  •   D.sen    7 年前

    你可以用 make.names

    df <- data.frame(x=NA)
    colnames(df) <- c("This col name has spaces")
    colnames(df) <- make.names(colnames(df), unique=TRUE)
    

    它将返回以句点而不是空格作为分隔符的列名。

    colnames(df)
    [1] "This.col.name.has.spaces"
    

    根据帮助页面

    一种语法上有效的名称,由字母、数字和点组成 按数字

    编辑:包括带有特殊字符的示例。

    df <- data.frame(x=NA)
    colnames(df) <- c("Higher than 80(°F)")
    colnames(df) <- make.names(colnames(df), unique=TRUE)
    
    colnames(df)
    [1] "Higher.than.80..F."
    

    制作姓名 接受“非法”字符并用句点替换,以防止直接调用对象名时出现任何语法错误/问题。

    如果要删除重复 .

    colnames(df) <- gsub('(\\.)\\1+', '\\1', colnames(df))
    colnames(df)
    [1] "Higher.than.80.F."
    
        2
  •  2
  •   j3ypi    7 年前

    当我导入包含标题中空格的csv时,我实际上可以像往常一样使用美元运算符访问它们。假设我有一个数据。帧(df)如下:

       a a b b
     1   1   1
     2   1   2
    

    df$`a a`
    

    names(df) <- c("a_a", "b_b")
    

    分配的向量只需要与数据列具有相同的长度。框架更优雅的方法是使用stringr包。如果要用下划线替换所有空格,只需键入以下内容:

    library(stringr)    
    names(df) <- str_replace_all(names(df), " ", "_")