如何忽略.csv文件中的空标题?
我有一个像这样的csv文件
http://190.12.101.70/~digicelc/gestion/reportes/import/liquidacion/13958642917519.csv
我的代码是
data <- read.csv('1.csv',header = T, sep=";")
所以R告诉我
more columns than column names
我不想跳过文件的标题
谢谢你!答案 0 :(得分:2)
我在这里看不到同样的行为。 R将默认列名称和NA添加到不可用数据。
> data <- read.csv("test.csv", header = TRUE, sep = ";")
> data
col1 col2 col3 col4 X X.1
1 val1 val2 val3 val4 val5 NA
2 val1 val2 val3 val4 val5 NA
您使用的是最新版本吗?
答案 1 :(得分:0)
但是错误消息会告诉您问题究竟是什么。列数多于列名。
download.file("http://190.12.101.70/~digicelc/gestion/reportes/import/liquidacion/13958642917519.csv", destfile="1.csv")
D1 <- read.csv2("1.csv", skip=1, header=FALSE)
firstlines <- readLines("1.csv", 3)
splitthem <- strsplit(firstlines, ";")
sapply(splitthem, length)
# [1] 28 42 42
所以你有42个数据列(用分号分隔)但有28个列名(再次用列名分隔)。 R怎么会知道你想用哪个名字去哪个列? (&#34;计算机擅长遵循指示,但不是在阅读你的想法。&#34; - Donald Knuth)。
您需要编辑源文件,以便每列都有一个名称或跳过第一行,然后从其他位置获取列名。
是的,我的想法是采用名字,然后是标准变量,如V1,V2或
无论如何 - 否则有没有办法跳过这些?
好的,我只需稍加修改即可使用上述内容:
download.file("http://190.12.101.70/~digicelc/gestion/reportes/import/liquidacion/13958642917519.csv", destfile="1.csv")
D <- read.csv2("1.csv", skip=1, header=FALSE)
header <- strsplit(readLines("1.csv", 3), ";")[[1]]
names(D)[1:length(header)] <- header
现在你有前28个变量命名,其余的名为V29-V42。
你可以&#34;跳过&#34;其余的名字以各种方式。如果你按照另一个答案(戴夫)的建议去做,基本上就是
names(D) <- header
...然后变量29-42将具有NA名称。这不是可用的名称,您只能通过列号来处理这些变量。或者你可以这样做:
names(D)[29:43] <- ""
现在你也不能使用这些名字。
> D[[""]]
NULL
我认为给它们起名称是有用的,因为许多数据框操作都会假定名称。例如,假设您有空名称(&#34;&#34;如上所述)并尝试查看数据框的前几行:
head(D)
# skipped most of the output, keeping only column 42:
structure(c("-1", "70", ".5", "70", "266", "70"), class = "AsIs")
1 -1
2 70
3 .5
4 70
5 266
6 70
所以当使用head时,你会看到你的数据框有趣的名字。或者另一个例子:
D[1:3,29:31]
.1 .2
1 C_COMPONENTE_LIQ_DESDE_CO 243 LIQUIDACION TOPE CO
2 C_COMPONENTE_LIQ_DESDE_CO 243 RESIDUAL CO
3 C_COMPONENTE_LIQ_DESDE_CO 243 RESIDUAL CO
列名称应为非空,并尝试使用空名称 不支持的结果。允许使用重复的列名,但您需要使用check.names 对于data.frame生成这样的数据帧= FALSE。但是,并非所有操作都在 数据框将保留重复的列名称:例如类似矩阵的子集 将强制结果中的列名称是唯一的。
或者假设您在数据框的开头添加了一些列;如果你有col的名字那么你仍然可以将之前的第29列作为D $ V29来解决,但是使用D [,29]你会得到别的东西。
可能还有其他例子。换句话说,你可以拥有&#34;未命名&#34;数据框中的列,但我不认为这是一个好主意。从技术上讲,数据框中的所有列都将始终具有名称(它可以是&#34;&#34;或NA),那么为什么没有有意义的名称呢? (甚至V29总比没有好。)