我有这个数据框:
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
最后两个观察结果表明我可以多次出现。
答案 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