使用R

时间:2015-09-28 13:22:55

标签: r loops formatting

由于我对R相对较新,我想用它来格式化一个文件中的大量数据(+30,000个唯一ID),并在另一个文件中以不同格式重写它们。 我在解决某种R行为方面遇到了很大的问题。由于案例的复杂性,我共享一个包含示例文件的Dropbox文件夹。这就是我想要实现的目标:

我希望将文件格式化为" Final Product.dat"这是空格分隔的(但它必须严格保持与此处相同的间距,否则我正在运行的东西将无法运行!)。 因此,在文件的第一行有一个名为" HUXXX ... 1"这将从1到+30,000,然后接下来的5行将始终相同,然后有数据。 因此,从2到4的行写在一个单独的文件(SHead);对于我在" header.txt"中写的整行5。 对于第一行,我创建了另一个名为ID-s100的文件,其中包含" HUXXXX"加上ID列。我正在使用某种" sprintf"在这种情况下(参见dropbox中附带的代码)。  数据在" S100.txt&#34 ;;请注意,我已将ID设为第一列。

我的代码类型工作但在每个ID内将重复整个ID的相同值。例如,对于ID = 1而不是创建一个HU0000001和一个配置文件(如" Final Product.dat"),它将创建12次HU00001和相同的数据,然后对ID 2执行相同的操作。 我想要的是" Final Product.dat"是:一个独特的HUXXXXXN,以及下面每个HUXXXXN的对应数据(应该与ID列匹配)。 有人能帮我吗?我现在很难让代码处理我可以从互联网上找到的反馈,我想我可能需要一些见解。

https://www.dropbox.com/sh/5gxpw0dy2brahho/AADirGyvMUjkTDPbO4fJmlLBa?dl=0

由于我理解需要在此处编写代码和数据,因此我尽量做到最好:

我希望"最终产品"将看起来应该是好的: 第一行的粗体是我在每个ID

之后要改变的东西
  

* HU00000001 AAAA C 150 SOME DEFAULT

所以我有一个名为ID-s100.txt的文件,其中Col 1上的ID和Col 2上的HU编号。

这些行对于每个ID

都是相同的

@ SITE COUNTRY LAT LON SC FL
  LCO ................................................. (有些信息请到这里)
@ SCOM SALB SLU1 SLDR SLRO SLNF SLPF SMHB SMPX SMKE
..............................(其他一些信息在这里)

以上四行在SHead.txt文件中读取

然后header.txt如下:

@ SLB SLMH SLLL SDUL SSAT SRGF SSKS SBDM SLOC SLCL SLSI SLCF SLNI SLHW SLHB SCEC SADC

以下数据存储在" s100.csv"和" ksat和srfg.txt"并在第一列上有ID,之后有数据。 " ksat ......"只是一组数据一直重复到最后,下面是第一个ID(第一列......)数据的摘录:

   1      10    0.02    0.04    0.12    0.42       4       8     1.4    2.02    6.18
   1      20    0.02    0.04    0.12    0.42       4       8     1.4    2.02    6.18
   1      30    0.02    0.04    0.12    0.42       4       8     1.4    2.02    6.18
   1      40    0.02    0.04    0.12    0.42       4       8     1.4     0.5     5.5  
   2       5    0.02    0.04    0.12    0.42       3       8     1.4     2.4     5.5
   2      10    0.02    0.04    0.12    0.42       3       8     1.4     2.4     5.5
   2      20    0.02    0.04    0.12    0.42       3       8     1.4     2.4     5.5

...然后直到+30,000

这是代码:

Library(MASS)
setwd("C:\\....")
s100 = read.csv("C:\\.....\\S100.csv", header=F)
SHead = readLines("SHead.txt")
sID.n= read.table("C:\\.....\\ID-s100.txt",header=F)
sheader= read.table("C:\\.....\\header.txt", header=F)
ksat = read.table("C:\\.....\\Ksat and Srfg.txt", header=F)
m99 <- rep("-99", nrow(s100))
m9df = as.data.frame(m99)
SSAT.n = cbind(s100$V1, s100$V12, s100$V2, m9df, s100$V4, s100$V5, s100$V6, ksat$V1, ksat$V2,
            s100$V9, s100$V10, s100$V7, s100$V8, m9df, m9df, s100$V11, m9df, m9df, m9df)
for(id in s100$V1){
SSAT = SSAT.n[s100$V1 == id, 2:19]
 shead = as.matrix(sheader, dimnames = NULL)
 SSAT[is.na(DSSAT)] <- " "
xxm = as.matrix(DSSAT, dimnames = NULL)
 names(xxm) <- names(shead)
 t1 = rbind(shead,xxm)
t2 = as.data.frame(t1, dimnames = NULL)
 names(t2) = c("  ", "  ","  ","  ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ")
t3 = format(t2, justify = "right", col.names=F, row.names=F, dimnames=NULL)
sID = sID.n[sID.n$V1 == id, 2]
Line2 = paste(sprintf("%1s%1s %5s", "*", sID, " UPSC        SCL      140  SOIL PROFILE\n", "\n", sep=""))
file.n = "TRIAL.dat"
con = file(description = paste(file.n), open="a")
 writeLines(Line2, con=con, sep= "\n")
writeLines(SoilHead, con = con , sep = "\n" )
write.table(t3, file= con, append = TRUE, quote=F, col.names=FALSE, row.names= F)
close(con)
}

提前感谢您的帮助!

0 个答案:

没有答案