所以我试图使用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)则不会。
答案 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。