2017-06-20 1 views
-7

Je voudrais être en mesure d'avoir R identifier les groupes de lignes qui ont une valeur de 2,5 ou plus dans la colonne "Ratio". Je voudrais mettre la colonne "Ligne bleue" dans l'ordre croissant puis il peut analyser la colonne et trouver des groupes où il y a au moins 3 lignes avec "ratio" 2.5 ou plus. J'apprenais R et c'est un peu difficile, donc je ne suis pas entièrement sûr de savoir comment obtenir le code ou la table dans ce post.Comment identifier des groupes de cellules dans l'ordre croissant de R?

C'était plus de ce que je pensais que j'aimerais pouvoir faire.

> sample <- Sample_Set 
> sample 
# A tibble: 1,035 x 4 
    `Red Line` `Blue Line` `Pink Line`  Ratio 
     <dbl>  <dbl>  <dbl>  <chr> 
1 14.240790 -0.6062136 0.4010406 2.384615385 
2 33.642250 0.3219938 1.0332210 18.54285714 
3 18.770440 -0.3427896 1.4439050 0.437956204 
4 25.000000 -0.0888865 3.2341610 0.047752809 
5 22.655490 0.2765770 0.0000000 3.462365591 
6 29.140930 -0.4428549 8.3416500 13.72815534 
7 9.069122 -0.1931555 23.5919700 1.728971963 
8 22.772700 -0.1093864 8.2965650   548 
9 27.976010 -0.6779256 12.5053600   130 
10 36.450380 0.3586941 31.7442200  0.3375 
# ... with 1,025 more rows 


> View(Sample_Set) 
> sample <- Sample_Set 
> sample 
# A tibble: 1,035 x 4 
    `Red Line` `Blue Line` `Pink Line`  Ratio 
     <dbl>  <dbl>  <dbl>  <chr> 
1 14.240790 -0.6062136 0.4010406 2.384615385 
2 33.642250 0.3219938 1.0332210 18.54285714 
3 18.770440 -0.3427896 1.4439050 0.437956204 
4 25.000000 -0.0888865 3.2341610 0.047752809 
5 22.655490 0.2765770 0.0000000 3.462365591 
6 29.140930 -0.4428549 8.3416500 13.72815534 
7 9.069122 -0.1931555 23.5919700 1.728971963 
8 22.772700 -0.1093864 8.2965650   548 
9 27.976010 -0.6779256 12.5053600   130 
10 36.450380 0.3586941 31.7442200  0.3375 
# ... with 1,025 more rows 

> blue.ascend <- order(sample[[2]]) 
> sample[blue.ascend,] 
# A tibble: 1,035 x 4 
    `Red Line` `Blue Line` `Pink Line`  Ratio 
     <dbl>  <dbl>  <dbl>  <chr> 
1 11.703760 -3.112403 29.299420 3.726315789 
2 10.608060 -2.967731 36.217450 0.363914373 
3 15.675010 -2.386916 17.071960 0.687830688 
4 53.643770 -2.307055 78.458630 6.098360656 
5 13.269000 -2.263204 18.941790 33.59090909 
6 14.044770 -2.100525 17.298220 0.215686275 
7 16.193610 -2.081966 37.134140 0.001545595 
8 6.304129 -2.072906 8.467813 11.69642857 
9 16.012180 -2.063432 34.227490 0.631004367 
10 9.674278 -2.032597 15.004390 0.124744376 
# ... with 1,025 more rows 

Je voudrais être en mesure de trouver les données dans « Blue Line » où les lignes « Ratio » sont au-dessus de 2,5. Dans l'exemple ci-dessus, je voudrais qu'il me donne des valeurs, "-3.112403", "-2.307055", et "-2.263204" puisque ces valeurs sont dans un groupe de 5 et représentent 60% des valeurs dans l'ordre croissant . J'espère que cela a un peu plus de sens.

Merci pour toute l'aide. Je vais aller mieux avec le formatage et être plus précis avec les messages.

+3

Bienvenue dans StackOverflow. S'il vous plaît avoir une lecture à [comment faire un grand exemple R reproductible] (https://stackoverflow.com/a/5963610/6203226) et fournir un exemple reproductible lorsque vous posez une question. –

+0

Je me demande si un des problèmes avec votre question (et je ne suis pas l'un des 4 downvoters jusqu'à présent) est que la notion de «cellule» n'est pas «vrai R». R a des vecteurs, des listes et des matrices, mais pas de "cellules". Le terme «cellule» suggère que vous avez formé vos notions de réalité informatique dans le monde Excel, plutôt que dans l'un des «vrais langages de programmation». Il y a aussi le problème que vous n'offrez pas de [MCVE]. –

+0

Les groupes de 5 sont-ils mutuellement exclusifs? Ou les valeurs d'un groupe peuvent-elles être utilisées dans un autre groupe? En d'autres termes, s'agit-il toujours des observations 1-5, 6-10, 11-15 ou peut-il être 1-5, 2-6, 3-7? –

Répondre

1
library(dplyr) 

# create sample data 
set.seed(1) 
dat <- data.frame(`Blue Line` = rnorm(20, 0, 10), 
        Ratio = rlnorm(20, 1, 1), 
        stringsAsFactors = F, 
        check.names = F) 
dat 
    Blue Line  Ratio 
1 -1.645236 30.0126140 
2 -2.533617 2.6136821 
3 6.969634 5.4180684 
4 5.566632 2.7954753 
5 -6.887557 1.2926919 
6 -7.074952 3.2831138 
7 3.645820 0.4471064 
8 7.685329 11.7700111 
9 -1.123462 3.1684843 
10 8.811077 23.8697429 
11 3.981059 4.3732635 
12 -6.120264 1.3364991 
13 3.411197 5.0064464 
14 -11.293631 1.0681224 
15 14.330237 0.7759762 
16 19.803999 3.6380442 
17 -3.672215 1.7449190 
18 -10.441346 2.7212881 
19 5.697196 2.9280636 
20 -1.350546 1.5075398 

dat %>% 
    arrange(`Blue Line`) %>% 
    mutate(nth_group = ceiling(row_number()/5)) %>% 
    group_by(nth_group) %>% 
    mutate(pct_above = mean(Ratio > 2.5)) %>% 
    ungroup() %>% 
    filter(pct_above >= .6, Ratio > 2.5) 

# A tibble: 11 × 4 
    `Blue Line`  Ratio nth_group pct_above 
     <dbl>  <dbl>  <dbl>  <dbl> 
1 -2.533617 2.613682   2  0.6 
2 -1.645236 30.012614   2  0.6 
3 -1.123462 3.168484   2  0.6 
4  3.411197 5.006446   3  0.8 
5  3.981059 4.373264   3  0.8 
6  5.566632 2.795475   3  0.8 
7  5.697196 2.928064   3  0.8 
8  6.969634 5.418068   4  0.8 
9  7.685329 11.770011   4  0.8 
10 8.811077 23.869743   4  0.8 
11 19.803999 3.638044   4  0.8 

J'ai écrit le code pour vous montrer toutes les colonnes des lignes souhaitées, mais si vous ne souhaitez que les valeurs de la colonne Blue Line, ajoutez simplement cette commande à la fin de votre pipeline.

dat %>% select(`Blue Line`) 
+0

J'apprécie vraiment l'aide. C'était plus de ce que je pensais. – Lumbeezl