[R] data file - function write.fwf - library gdata
Paulo Barata
pbarata at infolink.com.br
Tue Feb 24 14:53:47 CET 2009
Dear R-list members,
I have a data file with thousands of lines (cases), where each line
contains the values of several variables. I would like to separate
these lines in small groups, with each group followed by a blank
line, to ease the visual inspection of the data in some situations.
I am writing the output files with function write.fwf in library
gdata, for correct column alignment.
Below is a small-scale example, which requires library gdata.
The results are shown just below the code.
In the example, output file 1 gives the correct result I am looking
for. But the real production code should be, I think, something
like the one that produces output file 2. But that code is not
working properly.
My questions are: in output file 2, why data that should
belong to the same line were written out in different lines? Why
wasn't each line written out a whole by the inner for command? What
causes the splitting of each line? How to go around this problem?
I am using R 2.8.1 running on Windows XP.
###-----------------------------------------------------------------------
### small-scale example
file.1 <- 'test-1.txt'
file.2 <- 'test-2.txt'
### this is just to construct a small dataframe x
a <- c(1,2,3,4,5,6)
b <- c(111,222,333,444,555,666)
x <- data.frame(a,b)
names(x) <- c('aaa','bbb')
space <- data.frame(' ')
library(gdata)
### build output file 'test-1.txt'
write.fwf(x[0,],file=file.1) # just the
header
write.fwf(space,file=file.1,colnames=FALSE,append=TRUE) # a blank line
write.fwf(x[1:3,],file=file.1,colnames=FALSE,append=TRUE) # two lines
write.fwf(space,file=file.1,colnames=FALSE,append=TRUE) # a blank line
write.fwf(x[4:6,],file=file.1,colnames=FALSE,append=TRUE) # two lines
### build output file 'test-2.txt'
write.fwf(x[0,],file=file.2) # just the
header
write.fwf(space,file=file.2,colnames=FALSE,append=TRUE) # a blank line
for (k in 1:2) { # two groups
for (j in 1:3) { # with
three lines each
write.fwf(x[3*(k-1)+j,],file=file.2,colnames=FALSE,append=TRUE)
} # for j
write.fwf(space,file=file.2,colnames=FALSE,append=TRUE) # a blank
line
} # for k
###-----------------------------------------------------------------------
These are the results:
Output file test-1.txt (the correct results):
aaa bbb
1 111
2 222
3 333
4 444
5 555
6 666
-----------
Output file test-2.txt (each line has been split in two lines):
aaa bbb
1
111
2
222
3
333
4
444
5
555
6
666
-----------
Thank you very much.
Paulo Barata
--------------------------------------------------------------------
Paulo Barata
Fundacao Oswaldo Cruz - Oswaldo Cruz Foundation
Rua Leopoldo Bulhoes 1480 - 8A
21041-210 Rio de Janeiro - RJ
Brazil
E-mail: pbarata at infolink.com.br
Alternative e-mail: paulo.barata at ensp.fiocruz.br
More information about the R-help
mailing list