Calcular combinaciones únicas de valores en la trama de datos, y los valores de resumen
-
11-10-2019 - |
Pregunta
Me gustaría trabajar con combinaciones únicas de var1
y var2
en mi trama de datos:
foo <- data.frame(var1 = c(1,1,2,2,2,2,3,3,3,3,3,4,4,4,4),
var2 = c(1,1,1,1,2,2,1,1,2,2,2,2,2,3,3))
Como se ha observado, los resultados unique(foo)
en esto:
var1 var2
1 1 1
2 2 1
3 2 2
4 3 1
5 3 2
6 4 2
7 4 3
A partir de las combinaciones únicas, ¿cómo consigo:
-
n
, el número de ocurrencias de un valorvar1
y -
svar
, la suma de los valores de cada valorvar1
var2
.
La salida podría tener este aspecto:
var1 n svar
1 1 1 1
2 2 2 3
3 3 2 3
4 4 2 5
Solución
unique(foo)
debe darle lo que está después aquí.
ACTUALIZACIÓN 2014: uso dplyr
en lugar de plyr
Yo recomiendo mirar en el plyr
biblioteca para otras tareas de tipo de agregación, o los equivalentes de base R de tapply()
, aggregate()
et al.
Mientras redundante para este ejercicio, así es como se usaría plyr:
library(plyr)
ddply(foo, .(var1), unique)
Tenga en cuenta que puede reemplazar único con cualquier número de funciones, como la búsqueda de la media y la desviación estándar de var2 este modo:
ddply(foo, .(var1), summarise, mean = mean(var2), sd = sd(var2))
Respuesta a editar
Ahora usted tiene un uso más legítimo para plyr()
. Tomando lo que hemos aprendido desde arriba:
x <- unique(foo)
combinado con plyr:
ddply(x, .(var1), summarise, n = length(var2), sum = sum(var2))
deben darle lo que está después.
Otros consejos
espero que entiendo bien su pregunta, trate de:
unique(foo)
Después pregunta fue editada:
No hay que escribir lo mismo que @Chase, una solución muy simple, pero no demasiado elegante podría ser:
foo$var12 <- paste(foo$var1, foo$var2, sep='|') # the two variables combined to one
table(foo$var12) # and showing its frequencies
Y la salida es una tabla, por supuesto:
1|1 2|1 2|2 3|1 3|2 4|2 4|3
2 2 2 2 3 2 2
Las respuestas son diferentes de lo que el estado, pero confío en mi código más de lo que confío en su respuesta, y no puedo llevar yo a cometer el pecado de nombrar una variable "Total":
newfoo <- data.frame(
var1=unique(foo$var1),
n = with(foo, tapply(var2, var1, length) ),
svar = with(foo, tapply(var2, var1, sum) ) )
newfoo
# var1 n svar
#1 1 2 2
#2 2 4 6
#3 3 5 8
#4 4 4 10
EDIT: (. No había en un principio descubierto lo de Chase hizo intentes decirme)
newfoo <- data.frame(
var1=unique(unique(foo)$var1),
n = with(unique(foo), tapply(var2, var1, length) ),
svar = with(unique(foo), tapply(var2, var1, sum) ) )
> newfoo
var1 n svar
1 1 1 1
2 2 2 3
3 3 2 3
4 4 2 5