如何从矢量中获取唯一元素,保留其名称?

时间:2017-03-10 08:57:50

标签: r unique subset

我知道有一个函数unique()从向量中提取唯一值。但我失去了名字。

实施例

vector = c("A" = 1, "B" = 2, "A" = 1, "C" = 3, "B" = 2, "D" = 3, "D" = 3)

如果我打印,我应该看到:

A B A C B D D
1 2 1 3 2 3 3

预期输出

A B C D
1 2 3 3

尝试:

如果我使用:unique(vector)我只会1 2 3

如果我使用:vector[!duplicated(vector)]我得到:

A B C 
1 2 3 

这很接近,但遗漏了"D" = 3

3 个答案:

答案 0 :(得分:2)

vector = c(A=1,B=2,A=1,C=3,B=2,D=3,D=3)

当你这样做时,

vector[!duplicated(vector)]

它会查找vector值的重复项而不是名称,因此您得到的输出是

A B C 
1 2 3 

如果您想查找唯一的名称,那么您应该在duplicated

names上运行vector功能
vector[!duplicated(names(vector))]

A B C D 
1 2 3 3 

使用unique

也可以实现类似的ouptut
vector[unique(names(vector))]

A B C D 
1 2 3 3 

答案 1 :(得分:1)

我们可以使用match

vector[match(unique(names(vector)), names(vector))]
# A B C D 
# 1 2 3 3 

tapply

tapply(vector, names(vector), FUN = head, 1)
#  A B C D 
# 1 2 3 3 

或使用data.table

library(data.table)
data.table(Key = names(vector), Value = c(vector))[, Value[1L], Key]

答案 2 :(得分:1)

添加另一个替代方案,也可能包含值和名称之间的差异

library(dplyr)
data_frame(value = v, name = names(v)) %>%
  group_by(name, value) %>% # alternatively: group_by(name) if name value pair is always unique
  slice(1) %>%
  ungroup()