从两组创建指标

Create indicator from two groups

我有这个数据框:

df<- data.frame(j = c("a", "a", "b", "b", "c", "c"), 
                t = c(2000,2010,2000,2010,2000,2010))
> df
        j    t
1       a 2000
2       a 2010
3       b 2000
4       b 2010
5       c 2000
6       c 2010

我正在尝试创建一个指标 jt 来识别 country/year:

        j    t  jt
1       a 2000  1
2       a 2010  2
3       b 2000  3
4       b 2010  4
5       c 2000  5
6       c 2010  6
7       c 2010  6
8       c 2010  6

最后两个观察表明我可以多次出现。

我们可以使用 paste 'df' 的行,并通过 matching 'v1' 和 unique 值来获得数字索引。

 v1 <- do.call(paste0, df)
 df$jt <- match(v1, unique(v1))

或者我们可以尝试 data.table。将 'data.frame' 转换为 'data.table' (setDT(df)),按 'j' 和 't' 分组,我们得到 .GRP 并赋值 (:=) 到 'jt'.

library(data.table)
setDT(df)[, jt := .GRP ,.(j, t)]
df
#   j    t jt
#1: a 2000  1
#2: a 2010  2
#3: b 2000  3
#4: b 2010  4
#5: c 2000  5
#6: c 2010  6
#7: c 2010  6
#8: c 2010  6
df<- data.frame(j = c("a", "a", "b", "b", "c", "c", "c", "c"), 
                t = c(2000,2010,2000,2010,2000,2010,2010,2010))
df$jt <- paste(df$j, df$t, sep="")
df$jt <- as.factor(df$jt)
str(df)

这使得 jt 成为每个独特组合的水平因素。如果你真的希望它们是数字,你可以使用因子水平强制它们:

df$jt <- as.numeric(factor(df$jt, levels = unique(df$jt)))
df