将标头(在单独的txt文件中)和数据(在单独的csv文件中)组合在一起以生成数据集

时间:2017-09-22 13:00:50

标签: r csv data.table

我有一个txt文件,其中包含标题列表和每列的值类型,如下所示:

header.txt:

airport string  
city    string  
country string  

和数据为:

data.csv:

SYD SYD AU
CCU CCU IND
MSP MSP US

我想将数据转换为:

airport city country
  SYD   SYD AU
  CCU   CCU IND
  MSP   MSP US 

我的想法是分别读取标题和数据文件,只从头文件中获取列名,转置它们,将其另存为单独的csv文件。 下一步是合并两个csv文件。

我使用data.table来读取文件

 monthlyHeader <- fread("header.txt")

但&#34;机场&#34;成为标题和#34;城市&#34;和&#34;国&#34;是&#34; airport&#34;

列的值
  airport string 
1  city  string 
2  country string 

monthlyHeader <- t(monthlyHeader)

monthlyHeader的转置不会产生预期的结果。

有没有更好的方法在R中实现这个?

2 个答案:

答案 0 :(得分:1)

根据要求使用Campaigns,可以按如下方式实现

data.table
library(data.table)
header <- fread("header.txt", header = FALSE)
header
        V1     V2
1: airport string
2:    city string
3: country string
data <- fread("data.csv", col.names = header$V1)
data

或者,在一行代码中

   airport city country
1:     CCU  CCU     IND
2:     MSP  MSP      US

答案 1 :(得分:0)

为了导入固定宽度的文件,我建议read_fwf包中的readr,它可以帮助您解决解析固定宽度文件时的大多数常见问题。下面是通过空列猜测列结尾来解析文件的示例 - 如果您的完整文件失败,还有其他可能的策略:

library(readr)
fwf <- "airport string  
city    string  
country string   "
fwf2 <- "SYD SYD AU
CCU CCU IND
MSP MSP US"

d1 <- read_fwf(fwf, fwf_empty(fwf, col_names = c("name", "type")))
d1
#> # A tibble: 3 x 2
#>      name   type
#>     <chr>  <chr>
#> 1 airport string
#> 2    city string
#> 3 country string

使用此数据框中的列名称的任务现在非常简单,只需在导入第二个文件时指定它们:

d2 <- read_fwf(fwf2, fwf_empty(fwf2, col_names = d1$name))
d2
#> # A tibble: 3 x 3
#>   airport  city country
#>     <chr> <chr>   <chr>
#> 1     SYD   SYD      AU
#> 2     CCU   CCU     IND
#> 3     MSP   MSP      US