Como importar dados da área de transferência (clipboard)

Uma forma simples de transferir dados de uma planilha (Excel, Calc, etc.) para o R é através da área de transferência (clipboard) através da seguinte função:
read.delim(“clipboard”,dec=”,”,header=T)

“clipboard” indica que os dados estão na área de transferência, dec=“,” que é utilizada a vírgula como separador decimal e header=T que a primeira linha contém títulos das colunas.

Considere que em uma planilha você tem os dados

Ct    Pt      Sexo
186  81,0   M
192  88,7   F
195  78,4   M
197  101,2 F
199  77,6  M
199  92,3  M
200  90,3  M
200  91,3  M
202  87,6  M

Selecione a área da planilha com os dados e copie (Ctrl C). No prompt do R escreva read.delim(“clipboard”,dec=”,”) e pressione Enter. Os dados estarão transferidos.

Também podemos fazer com que os dados da primeira coluna sejam importados como o nome das linhas, o que é útil em análises multivariadas. Para isto inserimos o parâmetro row.names=1

Para que os dados transferidos fiquem disponíveis devemos atribuí-los a um objeto: dados <- read.delim(“clipboard”,…) 

Como remover categorias (levels) não utilizadas

Um problema que encontramos ao subdividir um conjunto de dados é que as categorias excluídas continuam aparecendo nos sumários e nos gráficos.

Para se ver livre destas deve-se utilizar a função droplevels, que foi inserida na versão 2.12.0. No exemplo abaixo crio o data.frame dados1 onde a coluna categ possui três níveis: “a”, “b” e “c”. Em seguida crio o data.frame dados2 excluindo as linhas da categoria “b”. Veja que ela ainda conta como um nível e aparece no gráfico. Com a utilização da função droplevels este problema é contornado.

categ <- rep(c(“a”,”b”,”c”),c(10,10,10))
valor<-c(rnorm(10,5,2),rnorm(10,8,4),rnorm(10,12,3))
dados1<-data.frame(categ,valor)
levels(dados1$categ)
[1] “a” “b” “c”
plot(dados1)
dados2<-subset(dados1,categ!=”b”)
levels(dados2$categ)
[1] “a” “b” “c”
plot(dados2) 
dados3<-droplevels(subset(dados1,categ!=”b”))
levels(dados3$categ)
[1] “a” “c”
plot(dados3) 


Em casos específicos pode-se utilizar:
levels(dados2$categ[,drop=T])
[1] “a” “c”

Looping para consolidar dados

Obtive dados de batimetria em


Depois de trabalhar um pouco os dados em banco de dados fiquei com uma tabela (dat.bat) que indicava o código do bloco estatístico de 10′ de lado e as profundidades registradas (100 por bloco).

Meu objetivo foi consolidar as informações desta tabela que tinha cerca de 24 mil linhas em uma que contivesse por bloco os valores mínimo, médio, máximo e os quartis de 2,5%, 25%, 50%, 75% e 97,5%. Também tive a curiosidade em ver quanto tempo era gasto para processar as informações de cada bloco.

Para rodar a rotina abaixo criei um vetor com os níveis dos blocos e um data.frame para colocar os resultados dos cálculos

blocos<-levels(dat.bat$BL)
Q<-rep(0,length(blocos))
dat.stat<-data.frame(blocos,Q,Q,Q,Q,Q,Q,Q,Q)
names(dat.stat)<-c(“BL”,”Min”,”Q002″,”Q025″,”Q050″,”Q075″,”Q098″,”Max”,”Med”)

Depois fiz um looping para o cálculo. Inicialmente o resultado do message (ou print) só aparecia se a rotina fosse parada ou terminada. Como eu estava no Windows tive que desmarcar a saída com buffer em Misc (Ctrl W) ou colocar após o message o comando flush.console()

for (i in 1:nrow(dat.bat)) {
dat.stat[i,c(2:8)]<-quantile(dat.bat[BL==blocos[i],2],
prob=c(0,0.025,0.25,0.5,0.75,0.975,1))
dat.stat[i,9]<-mean(dat.bat[BL==blocos[i],2])
message(“linha “,i,” processada às “,format(Sys.time(), “%H:%M:%S”))
}