繁体   English   中英

如何从r中的数据框中的2列中提取唯一级别

[英]How to extract unique levels from 2 columns in a data frame in r

我有data.frame

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"
top.xy <- unique(unlist(df[1:2,]))
top.xy

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

尝试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"

您可以获得第一个两个柱子的独特水平:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM