I have a .csv datafile with many columns. Unfortunately, string values do not have quotation marks (i.e., apples i.o. "apples). When I use read_csv from the readr package, the string values are imported as characters:
library(readr)
mydat = data.frame(first = letters, numbers = 1:26, second = sample(letters, 26))
write.csv(mydat, "mydat.csv", quote = FALSE, row.names = FALSE)
read_csv("mydat.csv")
results in:
Parsed with column specification:
cols(
first = col_character(),
numbers = col_integer(),
second = col_character()
)
# A tibble: 26 x 3
first numbers second
<chr> <int> <chr>
1 a 1 r
2 b 2 n
3 c 3 m
4 d 4 z
5 e 5 p
6 f 6 j
7 g 7 u
8 h 8 l
9 i 9 e
10 j 10 h
# ... with 16 more rows
Is there a way to force read_csv to import the string values as factors i.o. characters?
Importantly, my datafile has so many columns (string and numeric variables) that, AFAIK, there is no way to make this work by providing column specifications with the col_types argument.
Alternative solutions (e.g. using read.csv to import the data, or dplyr code to change all character variables in a dataframe to factors) are appreciated too.
Update: I learned that whether or not the values in the csv file have quotes or not makes no difference for read.csv or read_csv. read.csv will import these values as factors; read_csv will import them as characters. I prefer to use read_csv because it's considerably faster than read.csv.
col_factor()
withincol_types
. Or just useread.csv
. – Casteread_csv('mydat.csv', col_types = cols(first = col_factor(levels = letters)))
. I think your question might be misguided, though; R handles quotations automatically. – Castecol_types
can be used for a single column by name withincols
; it will default tocol_guess()
for those you don't specify. – Castespec_csv
, or usedata.table::fread
, which has a more normalstringsAsFactors
parameter. – Caste