2016-10-12 2 views
3

У меня есть кадр данных с несколькими столбцами, и я хочу иметь возможность изолировать два столбца и получить общее количество уникальных значений ... вот пример того, что я имею в виду:Извлечение уникальных значений из фрейма данных с использованием R

Допустим, у меня есть кадр данных ДФ:

df<- data.frame(v1 = c(1, 2, 3, 2, "a"), v2 = c("a", 2 ,"b","b", 4)) 
df 

    v1 v2 
1 1 a 
2 2 2 
3 3 b 
4 2 b 
5 a 4 

Теперь, что им пытаются сделать, это извлечь только уникальные значения более двух столбцов. Так что, если я просто использовал уникальный() для каждого столбца из положить будет выглядеть следующим образом:

> unique(df[,1]) 
[1] 1 2 3 a 
> unique(df[,2]) 
[1] a 2 b 4 

Но это не хорошо, как он находит только уникальные значения на столбец, в то время как мне нужно общее количество уникальных значений над двумя колоннами! Например, «a» повторяется в обоих столбцах, но я хочу, чтобы он подсчитывался один раз. Для примера вывода того, что мне нужно; представьте столбцы V1 и V2 расположены на верхней части друг с другом следующим образом:

V1_V2 
1  1 
2  2 
3  3 
4  2 
5  a 
6  a 
7  2 
8  b 
9  b 
10  4 

Уникальные значения V1_V2 бы:

V1_V2 
1  1 
2  2 
3  3 
5  a 
8  b 
10  4 

Тогда я мог бы просто посчитать строки с помощью nrow(). Любые идеи, как я мог бы это достичь?

+2

'уникальный (unlist (ДФ))'? Но будьте осторожны с принуждением, которое произойдет, когда вы будете смешивать подобные типы. – joran

+0

'unique (c (df [, 1], df [, 2]))' – dww

ответ

5

Это хорошо подходит для union:

data.frame(V1_V2=union(df$v1, df$v2)) 

# V1_V2 
#1  1 
#2  2 
#3  3 
#4  a 
#5  b 
#6  4 
+1

Это именно то, что я пытался сделать ... У меня должно было быть около 15 строк кода, пытающихся сделать то, что вы достигли в 1 ... благодаря! – Electrino

0

Попробуйте это:

unique(c(df[,1], df[,2])) 
Смежные вопросы