2016-06-29 11 views
-3

から指標を作成します。私は、このデータフレームを持つ2つのグループ

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つの観測がIという信号複数の出現を持つことができます。

答えて

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) 

。実際に数値にしたい場合は、因子レベルを使用して強制することができます:

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

Works。私はこのベースのRソリューションを好む。 – 000andy8484

2

の行に 'df'の行を使用し、数字のインデックスをmatchで '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'に(:=)割り当てます。各ユニークな組み合わせのためのレベルと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 
関連する問題