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