从两组创建指标
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' 的行,并通过 match
ing '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
我有这个数据框:
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' 的行,并通过 match
ing '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