Problema
Al usar sqldf, al contrario que R, cuando dividimos un número entero entre otro, devuelve un número entero en lugar de uno real. Es decir:
1/5
[1] 0.2
library(sqldf)
sqldf("SELECT 1/5")
1/5
1 0
Solución
Multiplicamos el numerador o el denominador por 1.0 o convertimos uno de los números a real.
sqldf("SELECT (1.0*1)/5") # Numerador
sqldf("SELECT 1/(5*1.0)") # Denominador
sqldf("SELECT CAST(1 AS REAL)/5") # Convertimos numerador
sqldf("SELECT 1/CAST(5 AS REAL)") # Convertimos denominador
Otro ejemplo
Veamos un ejemplo práctico que vimos en esta entrada. Calcularemos el porcentaje del total de la columna del siguiente data frame.
x freq
1 Jan 7
2 Feb 23
3 Mar 86
4 Apr 281
Código para crear el data frame anterior:
df <- read.table(text = "x freq
Jan 7
Feb 23
Mar 86
Apr 281",
header =TRUE)
sqldf('SELECT x, freq, (freq*1.0)/(SELECT SUM(freq)
FROM df) AS prob
FROM df')
x freq prob
1 Jan 7 0.01763224
2 Feb 23 0.05793451
3 Mar 86 0.21662469
4 Apr 281 0.70780856
Entradas relacionadas
No hay comentarios:
Publicar un comentario