2014-04-29 6 views
0

J'ai une question concernant le traitement des valeurs dans un data.frame. Le data.frame suivant obtiendrait la valeur de la première colonne qui se trouve dans la même ligne que la valeur maximale de la deuxième colonne. En cas il y a plusieurs valeurs maximales égales dans la deuxième colonne, je voudrais revenir la plus petite valeur d'entre eux dans la première colonneobtenir la plus petite valeur d'une colonne par rapport à la valeur maximale d'une autre colonne

power total found 
1 31.0 7 7 
2 30.5 8 7 
3 30.0 9 8 
4 29.5 9 8 
5 29.0 9 7 
6 28.5 8 7 
7 28.0 10 8 
8 27.5 10 8 
9 27.0 10 8 
10 26.5 11 9 
11 26.0 11 9 
12 25.5 9 8 
13 25.0 9 9 
14 24.5 8 8 
15 24.0 10 9 
16 23.5 8 7 
17 23.0 9 8 
18 22.5 7 7 
19 22.0 7 7 
20 21.5 7 7 
21 21.0 4 4 
22 20.5 4 4 
23 20.0 3 3 
24 19.5 2 2 
25 19.0 2 2 
26 18.5 2 2 
27 18.0 2 2 
28 17.5 1 1 
29 17.0 1 1 
30 16.5 0 0 
31 16.0 0 0 
32 15.5 0 0 
33 15.0 0 0 
+0

Ceci est un exercice assez simple dans R. Pouvez-vous partager ce que vous avez essayé jusqu'ici et pourquoi cela n'a pas fonctionné? – Justin

+1

'min (dat [dat [, 2] == max (dat [, 2]), 1])' – josliber

+0

Merci beaucoup à tous, je n'avais jamais travaillé avec les maxima et les minima en R donc je ne savais pas comment pour travailler avec eux, j'ai beaucoup aidé. – Alex

Répondre

1
# Create some fake data 
set.seed(14) 
df = data.frame(power = sample(seq(15,31,0.5),30, replace=TRUE), 
    total= sample(c(0,1,2,3,7:11), 30, replace=TRUE), 
    found=sample(c(0:2,7:9), 30, replace=TRUE)) 

df$total[c(5,9)] = NA # Add some missing data 

# Minimum of `power` at maximum of `total` 
min(df$power[df$total==max(df$total, na.rm=TRUE)], na.rm=TRUE) 
[1] 17.5 

Si vous voulez voir toutes les valeurs de power à la valeur maximale du total:

df$power[df$total==max(df$total, na.rm=TRUE)] 
[1] NA NA 17.5 25.0 30.5 31.0 

vous pouvez utiliser la fonction which si vous ne voulez pas les valeurs manquantes retournées:

df$power[which(df$total==max(df$total, na.rm=TRUE))] 
[1] 17.5 25.0 30.5 31.0 

which rendements seulement les indices de ligne pour laquelle le test logique est TRUE, alors que le test logique retourne seule une valeur de TRUE, FALSE ou NA pour chaque rangée.

Questions connexes