2017-09-19 3 views
0
df <- 
ID AMT  
    1 NA  
    1 50  
    1 NA 
    2 NA 
    2 NA 
    2 50 


dfout <- 
ID AMT FLAG 
    1 NA  1 
    1 50  0 
    1 NA  0 
    2 NA  1 
    2 NA  1 
    2 50  0 

für jedes Fach ID ein FLAG==1 hinzufügen, wenn AMT NA ist, bis Sie eine Reihe dort sind, wo AMT> 0, dann der Rest FLAG für dieses Thema ist 0. Zum Beispiel , für das Thema 1 in "df" über FLAG==1 sollte für die erste Zeile angegeben werden, wenn AMT NA ist. Obwohl die letzte Zeile NA für das gleiche Thema ist, sollte FLAG gleich null sein, wenn wir AMT> 0 davor drücken.FLAG basierend auf bestimmten Zustand in dem Datenrahmen

Wie in R wie ich einen großen Datensatz haben.

Antwort

1

Dies ist eine Möglichkeit, es getan werden könnte:

library(tidyverse) 

df <- tribble(
~ID, ~AMT,  
1, NA,  
1, 50,  
1, NA, 
2, NA, 
2, NA, 
2, 50) 

df %>% 
    rownames_to_column() %>% 
    group_by(ID) %>% 
    mutate(x = as.numeric(rowname < min(rowname[!is.na(AMT)]))) 

#> # A tibble: 6 x 4 
#> # Groups: ID [2] 
#> rowname ID AMT  x 
#>  <chr> <dbl> <dbl> <dbl> 
#> 1  1  1 NA  1 
#> 2  2  1 50  0 
#> 3  3  1 NA  0 
#> 4  4  2 NA  1 
#> 5  5  2 NA  1 
#> 6  6  2 50  0 
+0

@markedly es für dieses Beispiel arbeitete. Aber es hat nicht funktioniert, als ich es auf meinen Datensatz angewendet habe. Ich habe nur Nullen. Muss der Datenrahmen ein bestimmtes Strukturformat haben? Ich habe viele andere Spalten im Datensatz, aber ich habe hier keinen Einfluss auf den Prozess? – Amer

+0

@Amer, können Sie ein Beispiel Ihres Datasets zu Ihrer Frage mit 'dput (head (df))' hinzufügen? – markdly

Verwandte Themen