2015-10-20 106 views
0

可能是一個簡單的問題。我有一個如下的數據集。列出所有列元素名稱

dat2 <- read.table(header=TRUE, text=" 
ID De Ep Ti ID1 
A1123 A117 A121 A100 A11231 
        A1123 A108 C207 D110 E11232 
        A1124 A122 C207 D110 E11232 
        A1124 A117 C207 D110 E11232 
        A1124 A122 C208 D110 E11232 
        B1125 A108 C208 D110 E11232 
        B1125 A108 C208 D110 E11232 
        B1126 A122 C208 D110 E11233 
        C1126 A109 C208 D111 E11233 
        ") 
dat2 
dat2 
    ID De Ep Ti ID1 
1 A1123 A117 A121 A100 A11231 
2 A1123 A108 C207 D110 E11232 
3 A1124 A122 C207 D110 E11232 
4 A1124 A117 C207 D110 E11232 
5 A1124 A122 C208 D110 E11232 
6 B1125 A108 C208 D110 E11232 
7 B1125 A108 C208 D110 E11232 
8 B1126 A122 C208 D110 E11233 
9 C1126 A109 C208 D111 E11233 

我可以通過使用table函數得到總結。

table(dat2$ID) 
A1123 A1124 B1125 C1126 
    2  3  3  1 

table(dat2$De) 
A108 A109 A117 A122 
    3 1 2 3 

我想列出前兩列中的所有元素名稱,如下所示。

t <- c("A1123", "A1124","B1125","C1126", "A108", "A109", "A117", "A122") 
t 
[1] "A1123" "A1124" "B1125" "C1126" "A108" "A109" "A117" "A122" 

基於Neal的快速​​反應,我可以輕鬆獲得前兩列的列表。

with(dat2, union(ID, De)) 
[1] "A1123" "A1124" "B1125" "C1126" "A117" "A108" "A122" "A109" 

但是,如果我想從所有列中獲取名稱列表,則上述代碼不起作用。

+0

是所有列,的確, 「因子」 S ?那麼,我想,你能做的最有效的方法就是連接每一列的「levels」。 –

+0

我編輯了數據。事實上,都是因素。 –

回答

4

使用工會找到唯一值在兩組:

with(dat2, union(ID, De)) 

所有列,使用減少:

Reduce(union, dat2) 
+0

非常快速,完美的作品。 –

+0

我已經稍微改變了這個問題。要從所有列中獲得所有元素名稱的列表'union'功能不起作用。 –

0

另一種選擇,以獲得獨特的價值觀爲整個數據幀是:

unique(unlist(dat2)) 

其中給出:

> unique(unlist(dat2)) 
[1] A1123 A1124 B1125 B1126 C1126 A117 A108 A122 A109 A121 
[11] C207 C208 A100 D110 D111 A11231 E11232 E11233 
18 Levels: A1123 A1124 B1125 B1126 C1126 A108 A109 A117 A122 A121 C207 ... E11233 

如果你想爲每個唯一值的數量,你可以使用:

table(unlist(dat2)) 

導致:

A1123 A1124 B1125 B1126 C1126 A108 A109 A117 A122 A121 C207 
    2  3  2  1  1  3  1  2  3  1  3 
    C208 A100 D110 D111 A11231 E11232 E11233 
    5  1  7  1  1  6  2