7
votes

Comment obtenir des proportions et des comptes d'un cadre de données dans R

J'ai une image de données comme celle ci-dessous, mais avec beaucoup plus de lignes xxx

de df je veux un cadre de données où les rangées sont l'unique Valeurs de df $ x2 et col1 est la proportion de 1s associée à chaque lettre et COL2 est le nombre de pièces de chaque lettre. Donc, ma sortie serait xxx

Je peux penser à des moyens élaborés et sales de le faire, mais je cherche quelque chose de court et efficace. Merci

r

0 commentaires

5 Réponses :


4
votes

Essayez d'installer Plyr et d'exécuter

do.call(rbind, lapply(split(df, df$x2),
                            with, list(prop  = mean(x1),
                                       count = length(x1))))


4 commentaires

Je ne pense pas que cela soit correct. Il a besoin de proportion. C'est différent de la moyenne par groupe.


@Arun, je pense que je suis en désaccord. OP regarde la proportion de 1 au sein de chaque groupe, donc moyenne est approprié. Voir que cela donne la production attendue de l'OP.


Si les valeurs de x1 sont toujours en {0, 1}, moyenne (x1) devrait être ce qu'il veut. Sinon, il peut faire la moyenne (x1 == 1)


J'aurais pu juré que j'ai vu le résultat de la réponse antérieure de Mark est la même que celle de l'OP. (-1) retourné.



3
votes

Je ne suis pas sûr que cela fait ce que vous voulez. XXX


1 commentaires

agrégat (x1 ~ x2, df, fonction (x) c (prop = moyen (x), compte = longueur (x)))



2
votes

Essayez d'utiliser Table CODE>

data.frame(proportions=tbl["1",] / colSums(tbl))
  proportions
a   0.6666667
b   0.0000000
c   0.5000000


0 commentaires

6
votes

J'aime @ la solution de Ricardosaporta (+1), mais vous pouvez utiliser ? Prop.table aussi:

getprops <- function(values, indicator){
  tab    <- table(values, indicator)
  ptab   <- prop.table(tab, margin=1)
  dframe <- data.frame(values=rownames(tab), prop=ptab[,2], count=tab[,2])
  return(dframe)
}

> getprops(values=df$x2, indicator=df$x2)
  values      prop count
a      a 0.6666667     2
b      b 0.0000000     0
c      c 0.5000000     1


0 commentaires

4
votes

Voici une doublure dans data.Table : xxx



dt <- data.table (df)


0 commentaires