我想计算每行唯一值的数量。
例如,使用此数据框:
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)。
有人知道一个简单的代码吗?到目前为止,我只找到了用于计算每列唯一值数量的代码。
答案 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