【问题标题】:R: read csv with column names in variablesR:用变量中的列名读取csv
【发布时间】:2017-09-21 13:12:16
【问题描述】:

我想读取一个 csv 文件并使用变量中的列名。当然,变量中的字符串等于csv文件的列名。

csv 中列中的名称是 e.g. “名称”、“ps”和“年份”。当我只想读取 csv 并分配列类型(没有任何变量)时,我使用:

library(readr)   
CarTest <- read_csv("~/_file.csv", 
                                  col_types = cols( 
                                  name = col_character(),
                                  year_a = col_character(),       
                                  ps =col_double()))

这个想法是在一个变量中分配列的名称,以确保如果 csv 文件中的列名发生更改,也只需要更改变量字符串。所以,我想之前在变量中分配列名(仍然是csv_file中的列名和变量中的字符串是相同的)。我尝试了不同的方法:这个例子(希望)显示,我尝试将变量 car_names 的字符串粘贴到 read_csv 函数中。但显然get 是错误的做法:

library(readr)    
car_names <- "name"      
engine_power <- "ps"
year_a <-"year" 



    CarTest <- read_csv("~/_file.csv", 
                                  col_types = cols( 

                                  get("car_names") = col_character(),
                                  get("year_a") = col_character(),       
                                  get("engine_power") =col_double()))

感谢您的帮助;)

【问题讨论】:

  • 请说明您正在使用的包。 read_csv() 不是基础 R 的一部分。
  • 我使用图书馆(阅读器)。
  • edit您的问题相应并确保它是minimal reproducible example - 谢谢。

标签: r csv names


【解决方案1】:

如果你只想强加列名,你可以这样做:

读取没有列名的数据:

data <- read.csv(file="myfile.csv", header=FALSE, sep=",")

强加列名:

names(data) <- c('id','name','type')

使用列名查看数据:

data

id      name    type
37707   name1   t1 
37726   name2   t2 
37737   name3   t3

【讨论】:

    【解决方案2】:

    您可以使用 col_names 参数指定列名:

    > library(readr)
    > read_csv("example.csv", col_names = c("name", "year_a", "ps"), col_types = cols(col_character(), col_character(), col_double()))
    # A tibble: 4 x 3
       name year_a    ps
      <chr>  <chr> <dbl>
    1     1      2   3.0
    2 test1   2017  35.5
    3 test2   2018  44.5
    4 test3   2019  22.0
    

    所以要使用您的示例变量,您可以这样做:

    library(readr)
    read_csv("example.csv", col_names = c(car_names, year_a, engine_power), col_types = cols(col_character(), col_character(), col_double()))
    

    【讨论】:

    • 谢谢你的回答,你认为有没有一种解决方案,列的顺序不重要? (原始的 csv 有 30 列)
    • 我不确定我是否理解您的问题。对read_csv 的调用中的列顺序很重要,因为它必须与文件中列的顺序相匹配。列的顺序不可能没有意义,因为 csv 文件格式给出了列的顺序含义。知道哪一列是哪一列的唯一方法是按它们的顺序。
    【解决方案3】:
    data1 <- read.csv("2016.csv",col.names = c("consitituency_name","candidate_surname","candidate_first_name","result","count_number","transfers","votes","total_votes","candidate_id","party"))
    

    这段代码在我的系统上运行良好

    【讨论】:

      猜你喜欢
      • 2015-07-13
      • 2023-03-14
      • 1970-01-01
      • 2014-06-12
      • 1970-01-01
      • 2019-07-03
      • 2017-10-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多