从两个组创建指标

时间:2016-06-29 17:09:40

标签: r categories

我有这个数据框:

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来识别国家/年:

        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

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我们可以使用paste行&#39; df&#39;,并通过match&#39; v1&#39;获取数字索引。使用unique值。

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

或者我们可以尝试使用data.table。转换&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df)),按&#39; j&#39;分组我们得到.GRP并将其分配(:=)给&#39; jt&#39;。

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