read.delim()函数用于从R中的不同点开始的列

时间:2018-03-10 20:56:30

标签: r readr

所以我试图使用read.delim()函数来查看CSV(我知道我可以使用read.csv(),但我需要这样做)。 csv文件包含从不同点开始的列,那么我将如何处理这样的代码呢? csv看起来像这样(例子):

<script src="https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.8.3/underscore.js"></script>

我试过这样做:

,,,Column_D, Column_E,
Column_A, Column_B, Column_C,,,
1,1,2,3,4,
.,.,.,.,.,
.,.,.,.,.,

当R读取文件时,A B C列具有正确的标题,但E和D不是。我希望他们所有人都有自己的标题。如果我不使用跳过功能,那么D和E列会得到正确的标题,但其他的(ABC)则不会。

1 个答案:

答案 0 :(得分:0)

正如@Tung所提议的那样,您可以跳过2个第一行,但不是手动设置列名,而是可以从数据中收集两个第一行并将它们组合起来设置列名。

library(tidyverse)

d <- read_delim("~/Bureau/something.csv", delim = ",", skip = 2, col_names = FALSE) 
names1 <- read_delim("~/Bureau/something.csv", delim = ",", 
                     skip = 0, n_max = 1, col_names = FALSE) %>% t %>% as.vector
names2 <- read_delim("~/Bureau/something.csv", delim = ",", 
                     skip = 1, n_max = 1, col_names = FALSE) %>% t %>% as.vector

从列名中删除“NA”,然后将它们与简单的粘贴结合起来 请注意,在您的示例中,最后一列没有名称,“Column_E”以空格字符开头......

names1[is.na(names1)] <- ""
names2[is.na(names2)] <- ""

colnames(d) <- paste0(names1, names2)

d
#> # A tibble: 3 x 6
#>   Column_A ` Column_B` ` Column_C` Column_D ` Column_E` ``   
#>   <chr>    <chr>       <chr>       <chr>    <chr>       <chr>
#> 1 1        1           2           3        4           <NA> 
#> 2 .        .           .           .        .           <NA> 
#> 3 .        .           .           .        .           <NA>

reprex package(v0.2.0)创建于2018-03-10。