Cree columnas a partir de factores y cuente [duplicar]
Esta pregunta ya tiene una respuesta aquí:
¿Cómo obtengo una tabla de contingencia? 6 respuestas Formas más rápidas de calcular frecuencias y emitir de largo a ancho 4 respuestasUn problema aparentemente fácil me mantiene muy ocupado.
Tengo un marco de datos:
> df1
Name Score
1 Ben 1
2 Ben 2
3 John 1
4 John 2
5 John 3
Me gustaría crear un resumen de la tabla como esta:
> df2
Name Score_1 Score_2 Score_3
1 Ben 1 1 0
2 John 1 1 1
Así que df2 debe (i) mostrar solo "Nombres" únicos y (ii) crear columnas a partir de los factores únicos en "Puntaje" y (iii) contar la cantidad de veces que una persona recibió dicho puntaje.
Yo he tratado
df2 <- ddply(df1, c("Name"), summarise
,Score_1 = sum(df1$Score == 1)
,Score_2 = sum(df1$Score == 2)
,Score_3 = sum(df1$Score == 3))
que produce:
Name Score_1 Score_2 Score_3
1 Ben 2 2 1
2 John 2 2 1
Así que mi intento cuenta incorrectamentetodo ocurrencias en lugar de contar "por grupo"
EDITAR Según los comentarios, también probéreshape
(posiblemente solo haciéndolo mal):
> reshape(df1, idvar = "Name", timevar = "Score", direction = "wide")
Name
1 Ben
3 John
ara empezar, falta la columna "Puntuación", pero peor que eso, según mi investigación enreshape
, No estoy convencido de que voy a obtener unconta de cada factor, que es el punto completo.