【问题标题】:Assign unique ID to equivalent rows in data frame为数据框中的等效行分配唯一 ID
【发布时间】:2017-06-16 08:55:53
【问题描述】:

我想根据两个(或更多)变量的唯一组合来计算 id 变量。考虑下面的简单示例:

# Example dataframe
mydf <- data.frame(var1 = LETTERS[c(1, 2, 1)], var2 = LETTERS[c(2, 1, 3)])
mydf

# var1 var2
# A    B
# B    A
# A    C

这里,第 1 行和第 2 行应该具有相同的 id,因为 ABBA 表示相同元素的组合。但是,第 3 行有一个不同的 id,因为 AC 组合只出现一次。

# Desired output
cbind(mydf, cid = c(1, 1, 2))

# var1 var2 cid
# A    B    1
# B    A    1
# A    C    2

有什么建议吗?

【问题讨论】:

    标签: r dataframe combinations permutation


    【解决方案1】:

    我们可以逐行sort,用duplicated创建一个逻辑vector并得到cumsum

    cbind(mydf, cid = cumsum(!duplicated(t(apply(mydf, 1, sort)))))
    

    【讨论】:

    • 失败,例如,在 mydf 中交换第 2 行和第 3 行。
    【解决方案2】:

    您可以从 factor 中受益,为此输入 base R:

    mydf$cid <- as.numeric(factor(apply(mydf,1,function(x) paste0(sort(x), collapse = ""))))
    

    它忽略等效行在数据框中出现的顺序。 cumsum 一次不起作用,比如你的数据框中的第 2 行和第 3 行被切换了。

    【讨论】:

      猜你喜欢
      • 2019-11-20
      • 1970-01-01
      • 2020-03-02
      • 2018-12-09
      • 1970-01-01
      • 1970-01-01
      • 2020-03-05
      • 2019-01-17
      • 1970-01-01
      相关资源
      最近更新 更多