Patrick Giraudoux
2025-Sep-14 17:39 UTC
[R] trouble with exporting a data.frame with " (quotation mark) in some columns into a tab delimited file, then importing the file
Dear listers, previous plain text was still more messy, Here a trial hopefully better... I encountered an issue with a CSV file that was imported correctly but could not be re-imported correctly after being written with R. This is probably because geographical coordinates were imported? as character?in degrees, minutes and seconds (DMS), which includes " (quotation mark) for the seconds. Below a reproducible example: db <- structure(list(lon = c(6.228561, 6.22532, 6.2260499999999999, 6.2267789999999996, 6.2224659999999998, 6.2209430000000001), latdms = c("47?12'28.36\"N", "47?12'33.46\"N", "47?12'28.37\"N", "47?12'27.48\"N", "47?12'31.31\"N", "47?12'33.15\"N"), londms = c("6?13'42.82\"E", "6?13'31.15\"E", "6?13'33.78\"E", "6?13'36.40\"E", "6?13'20.88\"E", "6?13'15.39\"E"), fusutmn = c(32L, 32L, 32L, 32L, 32L, 32L)), row.names = c(NA, 6L), class = "data.frame") > db write.table(db, file = "db.txt", row.names = FALSE, quote = FALSE, sep = "\t") db_import<-read.delim("db.txt") > db_import As you can see it, latdms and londms are now collapsed and all the columns on the right? have shifted to the left. I get the same issue with ; as a separator. I could not find a workaround... Any hint appreciated, Patrick
Bert Gunter
2025-Sep-14 18:05 UTC
[R] trouble with exporting a data.frame with " (quotation mark) in some columns into a tab delimited file, then importing the file
See ?write.table documentation for "qmethod", which needs to be set to "double" to write the data correctly for csv. This is most easily done by using read.csv and write.csv, for which this is the default. Ergo, the following : (using your example)> write.csv(db, file = "test", row.names = FALSE)## Note: Set row.names = FALSE so an extra column of numeric row names won't be added.> db2 <- read.csv("test") ## read it back in > identical(db2, db)[1] TRUE Apologies if I have misunderstood and this does not solve your problem. Cheers, Bert On Sun, Sep 14, 2025 at 10:46?AM Patrick Giraudoux <patrick.giraudoux at univ-fcomte.fr> wrote:> > Dear listers, previous plain text was still more messy, > > Here a trial hopefully better... > > I encountered an issue with a CSV file that was imported correctly but > could not be re-imported correctly after being written with R. This is > probably because geographical coordinates were imported as character in > degrees, minutes and seconds (DMS), which includes " (quotation mark) > for the seconds. > > Below a reproducible example: > > db <- structure(list(lon = c(6.228561, 6.22532, 6.2260499999999999, > 6.2267789999999996, 6.2224659999999998, 6.2209430000000001), latdms > c("47?12'28.36\"N", "47?12'33.46\"N", "47?12'28.37\"N", > "47?12'27.48\"N", "47?12'31.31\"N", "47?12'33.15\"N"), londms > c("6?13'42.82\"E", "6?13'31.15\"E", "6?13'33.78\"E", "6?13'36.40\"E", > "6?13'20.88\"E", "6?13'15.39\"E"), fusutmn = c(32L, 32L, 32L, 32L, 32L, > 32L)), row.names = c(NA, 6L), class = "data.frame") > > > db > > write.table(db, file = "db.txt", row.names = FALSE, quote = FALSE, sep > "\t") > > db_import<-read.delim("db.txt") > > > db_import > > > As you can see it, latdms and londms are now collapsed and all the > columns on the right have shifted to the left. I get the same issue > with ; as a separator. > > > I could not find a workaround... > > Any hint appreciated, > > Patrick > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide https://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code.
Ivan Krylov
2025-Sep-14 19:13 UTC
[R] trouble with exporting a data.frame with " (quotation mark) in some columns into a tab delimited file, then importing the file
? Sun, 14 Sep 2025 19:39:58 +0200 Patrick Giraudoux <patrick.giraudoux at univ-fcomte.fr> ?????:> write.table(db, file = "db.txt", row.names = FALSE, quote = FALSE, > sep = "\t") > > db_import<-read.delim("db.txt")Since write.table() had been called with quote=FALSE, you'll need to read the file with quote="" to prevent read.delim() from interpreting the quotes. -- Best regards, Ivan