我有一个包含三个标识符的大型数据框。例如:
df <- data.frame(year=c(1999,1999,2000,2000,2000), country=c('K','K','M','M','S'),
site=c('di','se','di','di','di'))
这将生成如下数据框:
year country site
1999 K di
1999 K se
2000 M di
2000 M di
2000 S di
我想在数据框中添加一个额外的列,并使用“年”,“国家/地区”和“网站”条目分配“唯一ID”。它看起来像这样:
year country site unique_id
1999 K di 1
1999 K se 2
2000 M di 3
2000 M di 3
2000 S di 4
非常感谢有关如何执行此操作的任何建议。我认为可以使用 plyr 包以某种方式完成它?
答案 0 :(得分:7)
这应该很好用。 (它利用了这样一个事实,即每个因子的唯一级别实际上都存储为整数,并使用as.numeric()
来访问/提取这些整数值。
df$unique_id <-
as.numeric(as.factor(with(df, paste(year, country, site, sep="_"))))
df
# year country site unique_id
# 1 1999 K di 1
# 2 1999 K se 2
# 3 2000 M di 3
# 4 2000 M di 3
# 5 2000 S di 4
答案 1 :(得分:1)
我会这样做
lookup <- data.frame(id=1:length(unique(apply(df, 1, paste, collapse=""))), key=unique(apply(df, 1, paste, collapse="")))
df$id <- apply(df, 1, function(x) lookup[lookup$key==paste(x, collapse=""), "id"])