2012-07-22 39 views
4

提取數據幀從2列獨特的水平我有data.frame如何在r中

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" 
+0

+1提供樣本數據和預期結果。 – 2012-07-22 19:53:07

回答

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

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

感謝您的快速回復。不幸的是,它不起作用,因爲我還有其他數字列。我更新了我的問題以反映這一點。對於那個很抱歉。關於更新的data.frame的任何想法?乾杯。 – Elizabeth 2012-07-22 14:28:58

+1

那麼,選擇相關的列:'top.xy < - unique(unlist(df [1:2,c(「Site.1」,「Site.2」)]))' – Roland 2012-07-22 15:04:33

+0

@Elizabeth,指定列像'as.vector(unique(unlist(df [1:2,1:2])))''''。 – A5C1D2H2I1M1N2O1R2T1 2012-07-22 15:06:13

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

你可以得到的冷杉2個collumns的獨特的水平:

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"