मैं एक काउंटर बनाना चाहता हूं जो संख्याओं की घटना की गणना करता है। उदाहरण के लिए, मान लें कि हमारे पास इस तरह का डेटा है

df <- data.frame(ID = c(rep(rep(seq(1:2),each=2),times=2)),gr=rep(c("A"),each=8))

  ID gr
1  1  A
2  1  A
3  2  A
4  2  A
5  1  A
6  1  A
7  2  A
8  2  A

हर बार डेटा 2 के साथ समाप्त होता है, मैं काउंटर सेट करना चाहता हूं। तो अपेक्षित आउटपुट

  ID gr  counter
1  1  A  1
2  1  A  1
3  2  A  1 
4  2  A  1  ~~data ends with 2
5  1  A  2
6  1  A  2
7  2  A  2
8  2  A  2  ~~data ends with 2
   1  A  3
   1  A  3
   2  A  3
   2  A  3  @@just for an example 

मैंने यह कोशिश की है

library(dplyr)

df%>%
  group_by(gr)%>%
  mutate(counter=cumsum(ID==2))

लेकिन ऐसा लगता है कि वांछित आउटपुट के करीब भी नहीं है!

हम वह कैसे कर सकते है ?

2
Alexander 14 जिंदा 2018, 10:27

1 उत्तर

सबसे बढ़िया उत्तर

dplyr के साथ एक विकल्प:

# added one more row to your example
df <- data.frame(ID = c(rep(rep(seq(1:2),each=2),times=2),1),gr=rep(c("A"),each=9))

library(dplyr)
df %>% 
  group_by(gr) %>%
  mutate(id=cumsum(c(0,diff(df$ID)) & lag(df$ID==2))+1)

आउटपुट:

# A tibble: 9 x 3
# Groups:   gr [1]
     ID     gr    id
  <dbl> <fctr> <dbl>
1     1      A     1
2     1      A     1
3     2      A     1
4     2      A     1
5     1      A     2
6     1      A     2
7     2      A     2
8     2      A     2
9     1      A     3
2
Florian 14 जिंदा 2018, 11:09