2011-03-28 9 views
7

Quiero un conteo simple del número de sujetos en cada condición de un estudio. Los datos ser algo como esto:Contando elementos únicos en el marco de datos

subjectid cond obser variable 
1234  1  1  12 
1234  1  2  14 
2143  2  1  19 
3456  1  1  12 
3456  1  2  14 
3456  1  3  13 

etc  etc etc  etc 

Este es un gran conjunto de datos, y no siempre es obvio cuántos sujetos únicos contribuyen a cada condición, etc.

tengo esto en un hoja.de.datos.

Lo que yo quiero es algo así como

cond ofSs 
1  122 
2  98 

Donde para cada "condición" Recibo un recuento del número de Unique SS aportando datos a esa condición. Parece que esto debería ser dolorosamente simple.

+0

Gracias a todos. Bueno, tenía razón en que era dolorosamente simple. Sin embargo, todos me han enseñado cuatro formas de hacerlo y me han dado una mejor apreciación de algunos de los muchos paquetes de R. – WGray

Respuesta

10

Utilice la función ddply del paquete plyr:

require(plyr) 
df <- data.frame(subjectid = sample(1:3,7,T), 
       cond = sample(1:2,7,T), obser = sample(1:7)) 

> ddply(df, .(cond), summarize, NumSubs = length(unique(subjectid))) 
    cond NumSubs 
1 1  1 
2 2  2 

La función ddply "divide" la trama de datos por la variable de cond, y produce una columna de resumen NumSubs para cada sub-trama de datos de.

5

Utilizando el fragmento de datos que he cargado en un objeto dat:

> dat 
    subjectid cond obser variable 
1  1234 1  1  12 
2  1234 1  2  14 
3  2143 2  1  19 
4  3456 1  1  12 
5  3456 1  2  14 
6  3456 1  3  13 

Entonces, una manera de hacer esto es utilizar agregada para contar el único subjectid (suponiendo que es lo que entiende por "ss"? ??

> aggregate(subjectid ~ cond, data = dat, FUN = function(x) length(unique(x))) 
    cond subjectid 
1 1   2 
2 2   1 
3

sólo para darle aún más opciones, también se puede utilizar tapply

tapply(a$subjectid, a$cond, function(x) length(unique(x))) 
1 2 
2 1 
4

o, si se quiere SQL y no les importa la instalación de un paquete:

library(sqldf); 
sqldf("select cond, count(distinct subjectid) from dat") 
Cuestiones relacionadas