从列的组合中获取唯一的哈希值

时间:2017-08-31 15:52:24

标签: r hash

我有{4}列的data.table。前三个是获取有关一个独特个体的数据所必需的。

c1   c2   c3   c4
a    c    e    other_data
a    c    e    other_data
a    c    f    other_data
a    c    f    other_data
a    d    f    other_data
b    d    g    other_data

# (c1 = "a" AND c2 = "c" AND c3 = "e") => one individual
# (c1 = "a" AND c2 = "c" AND c3 = "f") => another individual

我想计算另一个标记每个人的专栏:

c1   c2   c3   c4           unique_individual_id
a    c    e    other_data   1
a    c    e    other_data   1
a    c    f    other_data   2
a    c    f    other_data   2 
a    d    f    other_data   3 
b    d    g    other_data   4

我想从3列的内容中获得唯一的哈希值。

我将如何在代码中执行此操作?

3 个答案:

答案 0 :(得分:5)

as.numeric(as.factor(with(df, paste(c1, c2, c3))))
#[1] 1 1 2 2 3 4

答案 1 :(得分:3)

我们可以使用interaction创建唯一索引

df1$unique_individual_id <- as.integer(do.call(interaction, c(df1[-4], drop = TRUE)))
df1$unique_individual_id
#[1] 1 1 2 2 3 4

答案 2 :(得分:2)

或者,您可以粘贴感兴趣的值(对于每一行,将第1,第2和第3列中的值粘贴在一起),转换为因子然后转换为整数(这将为您的组合返回唯一ID号

df <- data.frame(c("a", "a", "b", "c", "c", "d", "d"), 
                 c("a", "a", "b", "c", "d", "e", "e"),
                 c("c", "c", "d", "d", "e", "e", "e"))
df$ID <- as.numeric(as.factor(sapply(1:nrow(df), (function(i) {paste(df[i, 1:3], collapse = "")}))))