计算每行唯一值的数量

时间:2015-02-20 11:54:24

标签: r count row unique

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

例如,使用此数据框:

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)。

有人知道一个简单的代码吗?到目前为止,我只找到了用于计算每列唯一值数量的代码。

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

我们也可以使用regex的矢量化方法。在paste数据集的每一行(do.call(paste0, ...)的元素之后,匹配任何字符的模式,捕获为一个组((.)),使用正向前瞻,仅匹配字符如果它稍后再次出现在字符串中(\\1 - 对应捕获的组的反向引用并将其替换为空白("")。所以,实际上只有那些字符保留为唯一的。然后,使用{ {1}}我们计算字符串中的字符数。

nchar