2017-06-25 4 views
1

Wie wird der Maximalwert für jede Zeile (z. B. 20 von b1 und a4) ermittelt, der 2 mal höher ist als der nächste Maximalwert (5 von b1 und a3) der gleichen Reihe?Wie der Maximalwert identifiziert wird, der 2 mal höher ist als der nächste Maximalwert

Abtastwerteingang

name a1 a2 a3 a4 
b1 1 1 5 20 
b2 10 9 20 9 
b3 1 1 1 1 

Beispielausgabe

b1 a4 20 
b2 a3 20 
+0

welcher Code haben Sie versucht? – Nate

+0

Was? Diese Frage ergibt keinen Sinn. Maximaler Wert von was? Reihe? Säule? Welches ist der "nächste Maximalwert? Behandelst du die ganze Sache als Matrix? –

Antwort

1

mit:

library(dplyr) 
library(tidyr) 
d %>% 
    gather(k, v, -name) %>% 
    arrange(-v, name) %>% 
    group_by(name) %>% 
    mutate(logi = v/lead(v, default = min(v)) >= 2) %>% 
    filter(v == first(v) & logi) %>% 
    select(-logi) 

ist das Ergebnis:

# A tibble: 2 x 3 
# Groups: name [2] 
    name  k  v 
    <fctr> <chr> <int> 
1  b1 a4 20 
2  b2 a3 20 

Daten verwendet:

d <- structure(list(name = structure(1:3, .Label = c("b1", "b2", "b3"), class = "factor"), 
        a1 = c(1L, 10L, 1L), 
        a2 = c(1L, 9L, 1L), 
        a3 = c(5L, 20L, 1L), 
        a4 = c(20L, 9L, 1L)), 
       .Names = c("name", "a1", "a2", "a3", "a4"), class = "data.frame", row.names = c(NA, -3L)) 
+1

danke für den Code. Ich erhalte einen Fehler, wenn ich dies auf einem tibble ausführe. Es heißt 'Name ist nicht gefunden' – user1883491

+0

Um mehr hinzuzufügen der Kommentar, meine Eingabe für diesen Code kam, nachdem ich ein tibble transponiert habe. Es scheint, dass die Werte als "char" transponiert wurden. Ich weiß immer noch nicht, wie ich dieses Problem vermeiden kann. Ich benutze diese Funktion, um c <- as_tibble (cbind (nms = namen (b), t (b))) Die erste Zeile und Spalten sind Zeichen und der Rest von ihnen sind 'int', aber nach der Transposition scheint es alles 'char' – user1883491

+0

@ user1883491 Könnten Sie Ihre Frage so aktualisieren dass ich dein Problem reproduzieren kann? – h3rm4n

Verwandte Themen