2016-06-29 3 views
-3

두 그룹에서 표시를 만듭니다나는이 데이터 프레임을

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 

마지막 두 관찰 신호 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'의 행 paste을 사용할 수 있으며 match에 ''값이있는 숫자 색인을 가져올 수 있습니다.

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

아니면 data.table으로 시도 할 수 있습니다. 'data.frame'을 'data.table'(setDT(df))로 'j'와 't'로 그룹화하면 .GRP이되고 '012'로 ':='을 할당합니다. 각각의 고유 한 조합에 대한 수준 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 
관련 문제