我有一个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中实现这个?
答案 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