【问题标题】:Count number of unique values per row [duplicate]计算每行唯一值的数量[重复]
【发布时间】:2017-04-24 14:55:21
【问题描述】:

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

以这个数据框为例:

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

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

【问题讨论】:

  • ues example &lt;- cbind(example, apply(example, 1, function(x)length(unique(x))))

标签: r count row unique


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我们还可以对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
    

    【讨论】:

    • 晚了 2 年才看到这个!
    猜你喜欢
    • 1970-01-01
    • 2021-08-03
    • 2012-10-25
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2021-11-12
    • 2018-06-17
    相关资源
    最近更新 更多