我有一个包含多列的数据框,我希望能够隔离其中两列,并获得唯一值的总数...这里是我的意思的一个例子:
假设我有数据框df:
df<- data.frame(v1 = c(1, 2, 3, 2, "a"), v2 = c("a", 2 ,"b","b", 4))
df
v1 v2
1 1 a
2 2 2
3 3 b
4 2 b
5 a 4
现在我想要做的是只提取两列的唯一值。因此,如果我只为每列使用unique(),那么输出将如下所示:
> unique(df[,1])
[1] 1 2 3 a
> unique(df[,2])
[1] a 2 b 4
但这并不好,因为它只找到每列的唯一值,而我需要两列上唯一值的总量!例如,&#39; a&#39;在两列中重复,但我只想计算一次。我需要的输出示例;想象列V1和V2如下所示放在彼此之上:
V1_V2
1 1
2 2
3 3
4 2
5 a
6 a
7 2
8 b
9 b
10 4
V1_V2的唯一值为:
V1_V2
1 1
2 2
3 3
5 a
8 b
10 4
然后我可以使用nrow()计算行数。 我是如何实现这一目标的?
答案 0 :(得分:9)
这非常适合union
:
data.frame(V1_V2=union(df$v1, df$v2))
# V1_V2
#1 1
#2 2
#3 3
#4 a
#5 b
#6 4
答案 1 :(得分:3)
试试这个:
unique(c(df[,1], df[,2]))
答案 2 :(得分:1)
通过这种方法,无论拥有多少列,都可以获取唯一值:
df2 <- as.vector(as.matrix(df))
unique(df2)
然后,只需使用length
。
答案 3 :(得分:0)
通用方法:
uq_elem=c()
for(i in 1:ncol(df))
{
uq_elem=c(unique(df[,i]), uq_elem)
uq_elem=unique(uq_elem)
}
所有不同的元素都位于:uq_elem