считать уникальные значения нескольких столбцов в R

r dplyr bigdata

3221 просмотра

2 ответа

367 Репутация автора

Предположим, у меня есть data.frame, как это:

a b 1
b c 2
c e 3
d a 4

Я пытался посчитать уникальные значения первых двух столбцов, поэтому должен быть результат, 5который обозначаетa b c d e

Но моя проблема в том, что мои данные настолько большие, около 7 000 000 строк, поэтому я хочу добавить второй столбец строк в первый. Но я знаю только, как добавлять по одной строке за раз, чтобы у кого-нибудь были идеи о том, как добавить всю колонку в первую? Или у вас есть лучшие идеи по решению этой проблемы?

заранее спасибо

Автор: dexhunter Источник Размещён: 18.07.2016 03:16

Ответы (2)


4 плюса

481040 Репутация автора

Решение

Мы можем использовать unlistсunique

length(unique(unlist(df1[1:2])))
#[1] 5

Или транспонировать набор данных, т.е. после подстановки первых двух столбцов, объединить его vector, получить uniqueэлементы и найтиlength

length(unique(c(t(df1[-3]))))
#[1] 5

данные

df1 <- structure(list(v1 = c("a", "b", "c", "d"), v2 = c("b", "c", "e", 
"a"), v3 = 1:4), .Names = c("v1", "v2", "v3"), class = "data.frame", 
row.names = c(NA, -4L))
Автор: akrun Размещён: 18.07.2016 03:17

0 плюса

33362 Репутация автора

В качестве компактной альтернативы вы также можете использовать функцию set union:

length(with(df1, union(v1, v2)))
[1] 5

Базовый код to unionпрактически идентичен коду @ akrun, который можно увидеть, набрав функцию без скобок:

union
function (x, y) 
unique(c(as.vector(x), as.vector(y)))
<bytecode: 0x41f0790>
<environment: namespace:base>
Автор: lmo Размещён: 18.07.2016 04:22
Вопросы из категории :
32x32