【问题标题】:How to extract unique levels from 2 columns in a data frame in r如何从r中数据框中的2列中提取唯一级别
【发布时间】:2012-07-22 13:58:46
【问题描述】:

我有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"

【问题讨论】:

  • +1 用于提供样本数据和预期结果。

标签: r unique dataframe


【解决方案1】:
top.xy <- unique(unlist(df[1:2,]))
top.xy

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

【讨论】:

  • 感谢您的快速回复。不幸的是,它不起作用,因为我还有其他数字列。我更新了我的问题以反映这一点。对于那个很抱歉。关于更新的 data.frame 的任何想法?干杯。
  • 好吧,选择相关的列:top.xy &lt;- unique(unlist(df[1:2,c("Site.1","Site.2")]))
  • @Elizabeth,用as.vector(unique(unlist(df[1:2, 1:2]))) 之类的东西指定列。
  • 感谢你们两位,我结合了你们的答案来解决问题。干杯
【解决方案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"

【讨论】:

    【解决方案3】:

    您可以获得前两个列的唯一级别:

    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"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-21
      • 1970-01-01
      • 1970-01-01
      • 2014-04-27
      • 2015-01-27
      • 1970-01-01
      相关资源
      最近更新 更多