【问题标题】:how to assign a unique identifier to multiple data frame entries如何为多个数据框条目分配唯一标识符
【发布时间】:2012-04-24 12:29:33
【问题描述】:

我有一个包含三个标识符的大型数据框。例如:

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 包完成?

【问题讨论】:

    标签: r plyr reshape


    【解决方案1】:

    这应该工作得很好。 (它利用了一个因素的唯一级别实际上每个都存储为整数这一事实,并使用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
    

    【讨论】:

    • 也许是transform(df, unique_id = as.integer(interaction(year, country, site, drop=TRUE)))
    • @baptiste -- 甜蜜。这好多了,我很高兴了解 drop=TRUE 到 interaction() 的参数。
    【解决方案2】:

    我会这样做

    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"])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 2021-08-25
      • 2014-02-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-22
      相关资源
      最近更新 更多