दो अन्य विकल्प:
1)data.table
पैकेज से .GRP
समारोह का उपयोग करना:
> dat
site score num
1: 1 0.14945795 1
2: 1 0.60035697 1
3: 1 0.94643075 1
4: 8 0.68835336 2
5: 8 0.50553372 2
6: 8 0.37293624 2
7: 4 0.33580504 3
8: 4 0.04825135 3
9: 4 0.61894754 3
10: 8 0.96144729 2
11: 8 0.65496051 2
12: 8 0.51029199 2
:
library(data.table)
setDT(dat)[, num := .GRP, by = site]
इस के नीचे से उदाहरण डाटासेट साथ में जो परिणाम
2)dplyr
से group_indices
समारोह का उपयोग करना:
dat$num <- group_indices(dat, site)
या जब आप गैर मानक मूल्यांकन के आसपास काम करना चाहता हूँ:
library(dplyr)
dat %>%
mutate(num = group_indices_(dat, .dots = c('site')))
जिसमें परिणाम:
site score num
1 1 0.42480366 1
2 1 0.98736177 1
3 1 0.35766187 1
4 8 0.06243182 3
5 8 0.55617002 3
6 8 0.20304632 3
7 4 0.90855921 2
8 4 0.25215078 2
9 4 0.44981251 2
10 8 0.60288270 3
11 8 0.46946587 3
12 8 0.44941782 3
के रूप में देखा जा सकता है, dplyr
समूह संख्याओं का एक अलग क्रम देता है।आधार आर के साथ
1):
यदि आप किसी अन्य संख्या हर बार समूह में परिवर्तन चाहते हैं, वहाँ कई अन्य विकल्प हैं
# option 1:
dat$num <- cumsum(c(TRUE, head(dat$site, -1) != tail(dat$site, -1)))
# option 2:
x <- rle(dat$site)$lengths
dat$num <- rep(seq_along(x), times=x)
2)data.table
साथ पैकेज:
library(data.table)
setDT(dat)[, num := rleid(site)]
जो सभी में परिणाम:
> dat
site score num
1 1 0.80817855 1
2 1 0.07881334 1
3 1 0.60092828 1
4 8 0.71477988 2
5 8 0.51384565 2
6 8 0.72011650 2
7 4 0.74994627 3
8 4 0.09564052 3
9 4 0.39782587 3
10 8 0.29446540 4
11 8 0.61725367 4
12 8 0.97427413 4
प्रयुक्त डेटा:
dat <- data.frame(site = rep(c(1,8,4,8), each = 3), score = runif(12))
इस पहलू आर में निर्माण है, मेरा मानना है। –