Cómo obtener el formato correcto de datos para SQLite en R con rtweet?
Tengo problemas para obtener el formato “correcto” de un data.frame:
El objetivo es almacenar un data.frame generado constantemente con rtweet directamente en una base de datos SQLite.
“`{r}
geocode <- c()
con <- dbConnect(RSQLite::SQLite(), “db_name”)
tweets <- as.data.frame(c())
for (i in geocode){
tweets <- search_tweets(geocode = geocode, n = 18000, retryonratelimit = T, include_rts = F)
dbWriteTable(con, “tweets”, tweets, append = T)
}
Este código me da el siguiente error:
Error: Solo se pueden enlazar listas de vectores de tipo “raw” (o NULL)
El formato de los datos es:
class(tweets)
[1] “tbl_df” “tbl” “data.frame”
Cuando exporto los datos con `fwrite()` a `.csv` e importo todo mediante `read.csv2`, `dbWriteTable()` funciona perfectamente:
```{r}
df <- read.csv2("FILE_NAME/tweets.csv", header = T, sep = ",")
dbWriteTable(con, "tweets", df, append = T)
Y el formato de df
aquí es:
> class(df)
[1] "data.frame"
Pero usar fwrite
y read.csv2
no es una opción ya que mi data.frame será demasiado grande para la memoria de R.
Simplemente utilizar as.data.frame()
tampoco funciona. Aunque ahora es un data.frame…
> class(as.data.frame(tweets))
[1] "data.frame"
Debe haber otra forma de obtener el formato correcto.
¡Muchas gracias de antemano por cualquier ayuda!
davy.ai
El problema aquí parece ser que
as.data.frame()
no convierte correctamente el objetotbl_df
en un objetodata.frame
regular que se pueda almacenar en SQLite. Una posible solución es convertir el objetotbl_df
en un objetomatrix
, que luego se puede convertir en un objetodata.frame
regular utilizando la funciónas.data.frame()
. Aquí hay una versión actualizada del código que utiliza este enfoque:En esta versión del código, primero convertimos el objeto
tbl_df
tweets
en un objetomatrix
utilizandoas.matrix()
. Luego convertimos el objetomatrix
en undata.frame
regular utilizandoas.data.frame()
, lo cual debería crear un objetodata.frame
que se puede almacenar en SQLite utilizandodbWriteTable()
.