将向量作为一行附加到 CSV 文件中

Posted

技术标签:

【中文标题】将向量作为一行附加到 CSV 文件中【英文标题】:Append a vector as a row in a CSV file 【发布时间】:2012-01-26 21:21:18 【问题描述】:

我已经拥有的:

考虑以下数据——只是虚拟数据,真实数据是自动创建的:

features <- numeric(0)
features <- c(features, 1, 2, 3, 4, 5, 6)
features2 <- numeric(0)
features2 <- c(features2, 1, 2, 3, 4, 5, 6)
featureVectors <- list()
featureVectors[["file1"]] <- features
featureVectors[["file2"]] <- features2
resultMatrix <- do.call(rbind, featureVectors)
colnames(resultMatrix) <- c("SPEC_MEAN", "SPEC_SD", "SPEC_MODE", "AUTOC_MEAN", "AUTOC_SD", "ZC_MEAN")

这会产生如下输出:

      SPEC_MEAN SPEC_SD SPEC_MODE AUTOC_MEAN AUTOC_SD ZC_MEAN
file1         1       2         3          4        5       6
file2         1       2         3          4        5       6

我可以通过调用 write.csv(resultMatrix, file="out.csv") 将其写入 CSV 文件。


我需要什么:

由于结果文件(当前)是动态创建的,我想在评估这些 features(即向量)后立即将它们写入 CSV 文件。

所以我想我会使用write.csvappend,但该选项不适用于该方法。然后我想我可以使用write.table,但是有两个问题:

    write.table 不缩进第一个空列名,因此我的第一行向左移动了一个。

    数据以某种方式错误地转置。请参阅下面的示例。


我尝试过的:

另外,调用这些命令……

write.table(resultMatrix, file="data-appended.csv", sep=",")
write.table(features, file="data-appended.csv", sep=",", append=TRUE, col.names=FALSE)

…产生这个结果:

"SPEC_MEAN","SPEC_SD","SPEC_MODE","AUTOC_MEAN","AUTOC_SD","ZC_MEAN"
"file1",1,2,3,4,5,6
"file2",1,2,3,4,5,6
"1",1
"2",2
"3",3
"4",4
"5",5
"6",6

……这不是我想要的。那么,如何将features 向量的内容(包括file 名称)附加到已经存在的CSV 文件中?

【问题讨论】:

R 看到的resultMatrix 的类型是什么? typeof(resultMatrix) =&gt; [1] "double"。重要吗,这里?我只想将新的 feature 向量写入文件,即是否有 resultMatrix 变量无关紧要。 对不起,我实际上是在寻找类(resultMatrix)的输出。 :) 【参考方案1】:

两次调整将解决您的两个问题。

要保持列标题的缩进,请使用不直观(但已记录!)参数col.names=NA

write.table(resultMatrix, file = "data-appended.csv", sep = ",", 
            col.names = NA)

要将features(向量)写为行而不是列,请将其转置并转换为矩阵,然后再将其传递给write.table()

FF <- as.matrix(t(features))
write.table(FF, file = "data-appended.csv", sep = ",", 
            col.names = FALSE, append=TRUE)

【讨论】:

那么,有没有比rownames(FF) = fileName 更简单的方法来设置file 以获得file1, 1, 2, 3, 4, 5, 6 并非如此。我认为这是做到这一点的正确方法。作为对您之前评论的回应,您还可以使用以下内容来创建文件的第一个标题行:writeLines(c("", colnames(resultMatrix)), con = "data-appended.csv", sep = ",")

以上是关于将向量作为一行附加到 CSV 文件中的主要内容,如果未能解决你的问题,请参考以下文章

如何在现有 csv 文件中写入新行而不将其附加到最后一行?

使用python批量将匹配行附加到csv文件

将一列附加到多个 csv 文件中,每行包含一个常量

csv 文件中的模式匹配并附加到匹配的行

如何使用 fast-csv npm 将新行或新行的数据(新行)附加到现有的 csv 文件

是否可以附加到现有文件的第一行?