如何从R数据框中的两列中提取唯一等级

4

我有一个数据框

df<-data.frame("Site.1" = c("A", "B", "C"),
               "Site.2" = c("D", "B", "B"),
               "Tsim" = c(2, 4, 7), 
               "Jaccard" = c(5, 7, 1))

#    Site.1 Site.2 Tsim Jaccard
#  1      A      D    2       5
#  2      B      B    4       7
#  3      C      B    7       1

我可以使用以下方法获取每列的唯一级别:

top.x<-unique(df[1:2,c("Site.1")])
top.x

# [1] A B
# Levels: A B C

top.y<-unique(df[1:2,c("Site.2")])
top.y

# [1] D B
# Levels: B D

我该如何获取两个列的唯一值,并将它们转化为一个向量,例如:

v <- c("A", "B", "D")
v
# [1] "A" "B" "D"

Sample data: name = "John" age = 32 is_programmer = TrueExpected result:姓名:John 年龄:32 是否为程序员:是 - Roman Luštrik
3个回答

2
top.xy <- unique(unlist(df[1:2,]))
top.xy

[1] A B D
Levels: A B C D

谢谢您的快速回复。不幸的是,它没有起作用,因为我还有其他数字列。我更新了我的问题以反映这一点。对此很抱歉。对于更新后的数据框有什么想法吗?干杯。 - Elizabeth
1
好的,选择相关列:top.xy <- unique(unlist(df[1:2,c("Site.1","Site.2")])) - Roland
@Elizabeth,使用类似于as.vector(unique(unlist(df[1:2, 1:2])))这样的方式指定列是有效的。 - A5C1D2H2I1M1N2O1R2T1
谢谢你们两个,我结合了你们的答案来解决问题。干杯! - Elizabeth

2
尝试使用“union”关键字:
union(top.x, top.y)
# [1] "A" "B" "D"
union(unique(df[1:2, c("Site.1")]), 
      unique(df[1:2, c("Site.2")]))
# [1] "A" "B" "D"

0
你可以获取前两列的唯一级别:
de<- apply(df[,1:2],2,unique)  
de

# $Site.1  
# [1] "A" "B" "C"  

# $Site.2  
# [1] "D" "B"  

接着你可以取两个集合的对称差:

union(setdiff(de$Site.1,de$Site.2), setdiff(de$Site.2,de$Site.1))  
# [1] "A" "C" "D"

如果您只对前两行感兴趣(就像您的示例中一样):
de<- apply(df[1:2,1:2],2,unique)  
de  
#      Site.1 Site.2  
# [1,] "A"    "D"   
# [2,] "B"    "B"  
union(de[,1],de[,2])  
# [1] "A" "B" "D"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接