计算R中多列的唯一值

Posted

技术标签:

【中文标题】计算R中多列的唯一值【英文标题】:count unique values of multiple columns in R 【发布时间】:2016-07-18 03:16:15 【问题描述】:

假设我有这样的data.frame:

a b 1
b c 2
c e 3
d a 4

我试图计算前两列的唯一值,所以结果应该是5,它代表a b c d e

但我的问题是我的数据太大了,大约 7,000,000 行,所以我想将第二列的行附加到第一列中。但我只知道如何一次追加一行,所以有人知道如何将整列追加到第一行吗?或者您对解决这个问题有更好的想法?

提前致谢

【问题讨论】:

【参考方案1】:

我们可以使用unlistunique

length(unique(unlist(df1[1:2])))
#[1] 5

或转置数据集,即在对前 2 列进行子集化后,将其连接到 vector,获取 unique 元素并找到 length

length(unique(c(t(df1[-3]))))
#[1] 5

数据

df1 <- structure(list(v1 = c("a", "b", "c", "d"), v2 = c("b", "c", "e", 
"a"), v3 = 1:4), .Names = c("v1", "v2", "v3"), class = "data.frame", 
row.names = c(NA, -4L))

【讨论】:

【参考方案2】:

作为一个紧凑的替代方案,您还可以使用 set 函数union

length(with(df1, union(v1, v2)))
[1] 5

union 的底层代码与 @akrun 的代码几乎相同,可以看到键入不带括号的函数:

union
function (x, y) 
unique(c(as.vector(x), as.vector(y)))
<bytecode: 0x41f0790>
<environment: namespace:base>

【讨论】:

以上是关于计算R中多列的唯一值的主要内容,如果未能解决你的问题,请参考以下文章

将唯一值(在多列中)传播到不同的列并粘贴聚合值

多列中的不同值

根据多列聚合函数的条件结果计算唯一记录

需要根据表中的唯一值将一列分解为多列?

如何计算 R 中多列的组内百分比变化?

用R中的另一个值替换数据框多列中出现的数字