计算每行的唯一值数
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
的矢量化方法。 paste
ing数据集每一行的元素后(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
我想计算每行唯一值的数量。
例如这个数据框:
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
的矢量化方法。 paste
ing数据集每一行的元素后(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