PaulBeales
PaulBeales

Reputation: 505

Write.table not separating by comma

Why doesn't this write out the csv as (4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4) (when viewed in Notepad)

results <- data.frame(Answer= rep(4,16))
write.table(results$Answer, file = "paul.csv", row.names=FALSE, col.names=FALSE, sep=",")

It's as if its ignored the Sep argument..? Paul

Upvotes: 0

Views: 4170

Answers (3)

Rui Barradas
Rui Barradas

Reputation: 76683

There are two simple possibilities.
One, use argument eol = "," like I have said in my comment above. The problem with this method is that it will include an extra "," at the end of the line, since write.table always includes an ending newline.

write.table(results$Answer, file = "paul.csv", row.names = FALSE, col.names = FALSE, eol = ",")

The other method is to use cat.

cat(results$Answer, file = "paul.csv", sep = ",")

I believe this is the one you want.

Upvotes: 1

J. Ring
J. Ring

Reputation: 333

You should not define variable as one column if you want sep to work because sep = ... works with columns. This is one way you can do it:

results <- data.frame(t(rep(4,16)))
write.table(results, file = "paul.csv", row.names=FALSE, col.names=FALSE, sep=",")

Upvotes: 3

Heikki
Heikki

Reputation: 2254

You have specified a vertical vector. When a vertical vector is being written, each vector element is written into an own line:

> results <- data.frame(Answer= rep(4,16))
> dim(results)
[1] 16  1
> results
   Answer
1       4
2       4
3       4
4       4
5       4
6       4
7       4
8       4
9       4
10      4
11      4
12      4
13      4
14      4
15      4
16      4

If you want to write the vector in a single line, you may transpose a vertical vector into a horizontal vector using function t( ):

> results <- t(data.frame(Answer= rep(4,16)))
> dim(results)
[1]  1 16
> results
       [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14] [,15] [,16]
Answer    4    4    4    4    4    4    4    4    4     4     4     4     4     4     4     4

Then writing the data into a file:

> results <- t(data.frame(Answer= rep(4,16)))
> write.table(results$Answer, file = "paul.csv", row.names=FALSE, col.names=FALSE, sep=",")

will yield the following contents:

4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4

Upvotes: 0

Related Questions