2012-02-15 136 views
5

我有一个长格式的纵向数据。我想创建一个基于变量列的ID变量来标识我的数据的每个观察结果。我如何在R中做到这一点?如何在R中创建ID列

例子:我有这样的数据

name year var1 var2 
A 1 4 3 
A 2 5 1 
A 3 4 2 
B 1 . . 
B 2 4 3 
B 3 5 1 

我想产生一种叫“身份证”与每个名称的唯一号码新列,如:

name id year var1 var2 
A 1 1 4 3 
A 1 2 5 1 
A 1 3 4 2 
B 2 1 . . 
B 2 2 4 3 
B 2 3 5 1 

任何帮助吗?

回答

4

如果您name列不只是包含单个字母(或者即使它),你可以使用:

dat$id <- as.numeric(as.factor(dat$name)) 

,或者更简单:

dat$id <- c(as.factor(dat$name)) 

其中dat是您的data.frame

1
tc=' 
name year var1 var2 
A 1 4 3 
A 2 5 1 
A 3 4 2 
B 1 . . 
B 2 4 3 
B 3 5 1' 

df <- read.table(text=tc, header=T) 

df$ID <- match(df$name, LETTERS) 

虽然不清楚名称是列还是数据框的rownames。 如果不是列然后尝试rownames(df)代替df$name

+0

我认为'text = tc'应该替换为'textConnection(tc)'。 – jbaums 2012-02-15 07:53:51

+0

@jbaums肯定为什么不。 – aatrujillob 2012-02-15 08:02:06

+0

@jbaums'text'是read.table的新参数,它有助于避免使用'textConnection'。如果你愿意的话,切断中间人。 – 2012-02-15 10:09:36