计算R中多列的唯一值

时间:2016-07-18 03:16:16

标签: r dplyr bigdata

假设我有这样的data.frame:

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

我试图计算前两列的唯一值,因此结果应为5,代表a b c d e

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

提前致谢

2 个答案:

答案 0 :(得分:3)

我们可以将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))

答案 1 :(得分:0)

作为紧凑的替代方案,您还可以使用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>