Estar trabajando en una planilla de cálculo y pasar rápidamente los datos a R suele ser algo poco práctico en la mayoría de las veces. Por este motivo, desarrolle una función que me permita copiar y pegar datos directamente a la consola de R.
La función invoca una ventana de shiny y permite pegar valores provenientes de cualquier planilla de cálculo.
La función puede obtenerse fácilmente desde el siguiente Link. Luego de descargar el archivo .rds, crear la función es muy fácil:
readRDS("subir_clipboard.rds")->subir_clipboard
Se llama a la función:
subir_clipboard()
Aparece la siguiente pantalla:
Se le pegan los datos que se desean subir:
Se obtiene el data.frame:
## country 1800 1801 1802
## 1: Afghanistan 3280000 3280000 3280000
## 2: Albania 410000 412000 413000
## 3: Algeria 2500000 2510000 2520000
## 4: Andorra 2650 2650 2650
## 5: Angola 1570000 1570000 1570000
## ---
## 191: Venezuela 718000 718000 718000
## 192: Vietnam 6550000 6550000 6550000
## 193: Yemen 2590000 2590000 2590000
## 194: Zambia 747000 747000 747000
## 195: Zimbabwe 1090000 1090000 1090000
subir_clipboard <- function() {
require(shiny)
require(shinyWidgets)
require(stringr)
require(data.table)
runApp(list(
ui = fluidPage(
fluidRow(column(3),
column(6,
tags$h1("Pega tus datos"),
textAreaInput("datos","","",
width = 500,height = 300),
textInput("sepdec","Separador de decimal:",","),
actionBttn(
inputId = "go",
label = "Subir Datos",
style = "jelly",
color = "primary",
icon = icon("upload")
)
))
),
server = function(input, output, session) {
observeEvent(input$go,{
texto<-input$datos
str_split(texto,"\n")[[1]]->kk
str_split(kk,"\t")->l
if (length(l[[length(l)]])==1) {
if (l[[length(l)]]=="") {
l<-l[-length(l)]
}}
rdo<-lapply(l[-1], function(x) {
return(as.data.table(t(x)))
})
rbindlist(rdo)->rdo2
m<-lapply(rdo2, function(x) {
as.character(x)->x
x<-ifelse(x=="",NA,x)
y<-as.numeric(str_replace(x,input$sepdec,".") )
if (sum(is.na(y))>0) {y<-x}
return(y)
})
m<-as.data.frame(m)
names(m)<-l[[1]]
stopApp(m)})
}
))
}