5

3 つの識別子を持つ大きなデータ フレームがあります。例えば:

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パッケージを使用して何とかできると思いますか?

4

2 に答える 2

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
于 2012-04-12T07:06:36.423 に答える
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"])
于 2012-04-12T07:12:07.020 に答える