【问题标题】:adding two lines of text to a csv file in R将两行文本添加到 R 中的 csv 文件
【发布时间】:2012-06-07 10:55:32
【问题描述】:

我希望使用我在循环中创建的 R 在 csv 文件中添加两行。我从一些文件开始,命名为 file1.csv、file2.csv 等,每个文件都包含两列坐标。然后,我将这些用作索引矩阵来创建新的 csv 文件,这些文件在索引文件的条目中列出了“2”,否则为“0”。我将标题添加到文件中,因此生成的文件如下所示:

"","1","2","3","4","5"
"1",0,0,0,0,0
"2",0,0,0,0,2

这正是我需要的(我的代码如下)。但是,我还需要在 csv 文件的开头添加两行,分别在标题之前读取“min 1”和“max 3”,这样它看起来像:

"min 1",,,,
"max 3",,,,
"","1","2","3","4","5"
"1",0,0,0,0,0
"2",0,0,0,0,2

我尝试将行添加到 M 矩阵、rbinding、合并两个 csv、读回 csv 文件并尝试添加行,但我没有得到任何有效的结果。非常感谢您的建议(以及改进我确信非常不雅的现有代码)。

谢谢

 csvdat <- list.files(pattern='file.*.csv')
 for (i in seq_along(csvdat)){
data <- read.csv(csvdat[i])
data[,2] -> x
data[,3] -> y
index=cbind(x,y)   
a <- length(x)+1    
matrix(nrow=a,ncol=a) -> M
M[] <- 0
M[index] <- 2
Cn <- c(1:a)
colnames(M) <- Cn
file <- as.character(paste("matrix", i, ".csv", sep=""))
write.csv(M, file,col.names=TRUE)
}

【问题讨论】:

  • 你为什么不先处理一个独立于循环的案例呢?稍后添加循环是微不足道的,在这里包含它只是一个不必要的复杂性。另外,你为什么要这样做,你是否构建了一些复杂的系统,现在更深入地挖掘自己?

标签: r csv


【解决方案1】:

这是“您要解决的问题是什么?”的经典案例。如果你解释你对输出文件做了什么,以及为什么它被限制在这样一个奇怪的配置中,有人可能会解释一个更好的方法来实现你最终想要的结果——而不仅仅是生成这个特定的 csv 文件。

也就是说,通常您可以使用writewrite.csv 将“min 1,min 3”字符串发送到文件,然后使用write.csv(data,{other arguments},append=TRUE) 将您的数据矩阵放在字符串下方.

【讨论】:

  • 完全同意 - 无论任务是什么,这听起来都不是解决问题的最佳方式......
  • 我使用该文件作为 Circuitscape 程序的输入,该程序需要我描述的格式的文件。该文件被读取为仅计算矩阵文件中值介于 min 和 max 之间的那些对的阻力距离,而不是所有可能的对(这将是默认值)。我开始的输出(两列)是另一个程序的输出。如果有人熟悉 Circuitscape 或有更好的解决问题的方法,请告诉我!
猜你喜欢
  • 2018-05-03
  • 2022-01-23
  • 1970-01-01
  • 2012-04-06
  • 2017-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多