2016-07-08 3 views
0

Ich habe einen Datensatz mit den folgenden Informationen innerhalb einer Gruppe in r off des letzten Wert basierend auf das Teil:wie alle Daten der Gruppe

  • Gruppe Gesundheitszustand
    • ein gesundes
    • ein gesund
    • ein nicht gesund
    • b gesund
    • b gesund
    • c gesund
    • c gesund
    • c nicht gesund

i irgendwie die Daten der Teilmenge durch Abtasten jeden Gesundheitszustand in jeder Gruppe, und wenn der Gesundheitszustand möchte „nicht gesund "in der letzten Zeile jeder Gruppe, die Gruppe information.so die Teilmenge, die die gewünschte Ausgabe ist:

  • Gruppe Gesundheitszustand
  • 0.123.
  • ein gesundes
  • ein gesundes
  • ein nicht gesund
  • c gesund
  • c gesund
  • c nicht gesund

Antwort

2

Mit Paketen, könnten Sie dplyr oder data.table hier:

library(dplyr) 
DF %>% group_by(group) %>% filter(health[n()] == "N") 

    group health 
    (fctr) (fctr) 
1  a  H 
2  a  H 
3  a  N 
4  c  H 
5  c  H 
6  c  N 

library(data.table) 
setDT(DF) 
DF[, if (health[.N] == "N") .SD, by=group] 

    group health 
1:  a  H 
2:  a  H 
3:  a  N 
4:  c  H 
5:  c  H 
6:  c  N 

Wie @docendodiscimus darauf hingewiesen, können Sie last(health) anstelle von health[n()] oder health[.N] verwenden. Beide Pakete haben eine last Funktion, die dies tut.


In Basis, @docendo vorgesehen:

subset(DF, ave(health == "N", group, FUN = function(x) tail(x, 1))) 

Und von @akrun:

subset(DF, group %in% group[health == "N" & !duplicated(group, fromLast=TRUE)]) 

Daten. Ich habe die OP-Daten nicht genau verwendet, da es mühsam war, sie zu reproduzieren. Stattdessen es:

group health 
1  a  H 
2  a  H 
3  a  N 
4  b  H 
5  b  H 
6  b  H 
7  c  H 
8  c  H 
9  c  N 

DF = structure(list(group = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 
3L, 3L), .Label = c("a", "b", "c"), class = "factor"), health = structure(c(1L, 
1L, 2L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c("H", "N"), class = "factor")), .Names = c("group", 
"health"), row.names = c(NA, -9L), class = "data.frame") 
+1

Eine weitere Option ist 'Teilmenge (DF, Gruppe% in% Gruppe [! Gesundheit == "N" & dupliziert (Gruppe, fromLast = TRUE)])' – akrun

Verwandte Themen