EDITA pesar de la decisión del OP de aceptar esta respuesta, la respuesta de @ Andrie es la solución preferida. Mi respuesta solo pretende informar sobre algunas características extrañas de los marcos de datos.
Como han señalado otros, la respuesta corta es que esto no es posible. data.frame
s están destinados a contener columnas de un solo tipo atómico. La sugerencia de @ Andrie es buena, pero solo por las patadas, pensé que podría señalar una forma de calzar este tipo de datos en un data.frame
.
Puede convertir la columna infractor a una lista (este código se supone que ha establecido options(stringsAsFactors = FALSE)
):
dat <- read.table(textConnection("1,4,'m'
1,5,20
1,6,'Canada'
1,7,4
1,8,5"),header = FALSE,sep = ",")
tmp <- as.list(as.numeric(dat$V3))
tmp[c(1,3)] <- dat$V3[c(1,3)]
dat$V3 <- tmp
str(dat)
'data.frame': 5 obs. of 3 variables:
$ V1: int 1 1 1 1 1
$ V2: int 4 5 6 7 8
$ V3:List of 5
..$ : chr "m"
..$ : num 20
..$ : chr "Canada"
..$ : num 4
..$ : num 5
Ahora, hay todo tipo de razones por qué esto es una mala idea. Por un lado, un montón de código que esperarías jugar muy bien con data.frame
s no le gustará esto y fallará, o se comportará de manera muy extraña. Pero pensé que lo señalaría como una curiosidad.
Andrie dijiste lo mismo que yo pero mejor. –
@ user718281, para leer como cadenas, no como factores, use read.csv (..., stringsAsFactors = FALSE) – Max
Gracias Andrie. Una cosa de la que no estoy muy seguro es cómo pasar del archivo csv al vector. Como en, entiendo que read.csv genera una matriz, no un vector. – evt