计算每行的唯一值数

Count number of unique values per row

我想计算每行唯一值的数量。

例如这个数据框:

example <- data.frame(var1 = c(2,3,3,2,4,5), 
                  var2 = c(2,3,5,4,2,5), 
                  var3 = c(3,3,4,3,4,5))

我想添加一列来计算每行唯一值的数量;例如第一行是 2(因为第一行有 2 和 3),第二行是 1(因为第二行只有 3)。

有谁知道一个简单的代码来做到这一点?到目前为止,我只找到了计算每列唯一值数量的代码。

apply 函数 returns 每行中唯一值数量的向量:

apply(example, 1, function(x)length(unique(x)))

您可以使用以下两种方式之一将其附加到您的 data.frame(如果您想将该列命名为 count):

example <- cbind(example, count = apply(example, 1, function(x)length(unique(x))))

example$count <- apply(example, 1, function(x)length(unique(x)))

我们还可以使用 regex 的矢量化方法。 pasteing数据集每一行的元素后(do.call(paste0, ...),匹配任意字符的模式,捕获为一组((.)),使用正向前瞻,只匹配字符如果它稍后再次出现在字符串中(\1 - 捕获组的反向引用并将其替换为空白("")。因此,实际上只有那些字符保持唯一。然后,使用 nchar我们统计字符串中的字符数。

example$count <- nchar(gsub("(.)(?=.*?\1)", "", do.call(paste0, example), perl = TRUE))
example$count
#[1] 2 1 3 3 2 1