2015-10-20 7 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

все ваши столбцы, на самом деле, "фактор" с ? Тогда, я думаю, наиболее эффективным вы можете сделать, чтобы объединить «уровни» из каждого столбца. –

+0

Я отредактировал данные. На самом деле все факторы. –

ответ

4

использовать объединение, чтобы найти уникальные значения в двух наборах:

with(dat2, union(ID, De)) 

Для всех столбцов, использование Сокращать

Reduce(union, dat2) 
+0

Довольно быстро и отлично работает. –

+0

Я немного изменил вопрос. Чтобы получить список всех имен элементов из всех столбцов, функция 'union' не работает. –

0

Другой вариант, чтобы получить уникальные значения для всего dataframe является:

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