2013-05-29 2 views
0

J'ai une trame de données comme lesélectionner des valeurs uniques avec une probabilité égale

suivant
c1 c2 
1 2 
1 3 
2 4 
2 5 
2 2 
3 1 
3 2 
... 

Je veux obtenir des valeurs c1 uniques, où c2 peut être choisie avec une probabilité égale s'il y a plusieurs lignes avec la même valeur c1 . Par exemple, le résultat final peut être:

c1 c2 
1 2 
2 2 
3 2 
... 

« Un choix aléatoire de c2 pour chaque valeur possible de c1 » est ce que je veux.

+0

Une explication plus claire est nécessaire pour que cette question soit compréhensible. – whuber

+0

quelle partie n'est pas claire? –

+2

Rien de tout cela! S'il vous plaît voir mon commentaire à la réponse de Stefan Wager pour quelques exemples différents de la façon dont cela pourrait être interprété. – whuber

Répondre

1

Voici une façon simple de le faire. Disons que votre dataframe s'appelle df.

x = unique(df$c1); 
y = sapply(x, function(arg)sample(df$c2[df$c1 == arg], 1)); 
new_df = data.frame(c1 = x, c2 = y); 
+1

Pour quoi faire? Quelle version de cette question répondez-vous? L'ensemble des valeurs uniques de 'c1' qui apparaît dans un échantillon aléatoire simple de' c2'? Un choix aléatoire de 'c2' pour chaque valeur possible de' c1'? Autre chose? – whuber

+1

"Un choix aléatoire de c2 pour chaque valeur possible de c1" est ce que je veux. –

0

est ici un moyen facile d'échantillonner une valeur de c2 pour chaque valeur unique de c1:

aggregate(c2 ~ c1, dat, sample, 1) # dat is the name of you data frame 

    c1 c2 
1 1 2 
2 2 4 
3 3 1 
Questions connexes