2015-10-13 1 views
0

Je n'ai pas trouvé de réponse claire à cette question, alors j'espère que quelqu'un pourra me mettre dans la bonne direction! J'ai une trame de données imbriquée (données de panel), avec plusieurs observations au sein de plusieurs individus. Je veux subdiviser ma base de données par les individus (id) qui ont au moins 20 lignes de données.Données de sous-ensemble par variables d'ID uniques avec un certain nombre de lignes

J'ai essayé ce qui suit:

subset1 = subset(df, table(df$id)[df$id] >= 20) 

Cependant, je trouve toujours des personnes avec moins de 20 lignes de données.

Quelqu'un peut-il fournir une solution?

Merci à l'avance

+0

Veuillez lire l'information sur la façon de donner un [exemple reproductible minimal] (http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example/5963610). – Jaap

+0

Merci, je vais essayer de le faire à l'avenir. – user3237820

Répondre

1
subset1 = subset(df, as.logical(table(df$id)[df$id] >= 20)) 

Maintenant, il devrait fonctionner.

La fonction de sous-ensemble obtient en fait une série de vrais et faux de la partie de condition, qui indique si la ligne doit être maintenue ou non/rencontrer la condition ou non. Par conséquent, la sortie de la partie de condition doit être une série de vrai ou de faux. Cependant, si vous mettez table(df$id)[df$id]>=20 dans la console, vous verrez que cela renvoie un tableau plutôt qu'une logique. Dans ce cas, il est assez direct que vous ayez juste besoin de le transformer en logique. Ensuite, ça fonctionne.