2015-01-26 2 views
2

Мне нужна строка кода, которая будет искать вектор чисел и возвращать количество вхождений. Для примераПодсчитайте количество экземпляров дубликатов R-кода

a=c(15,32,27, 63, 15,99, 32,32) 

dup=unique(a[duplicated(V.Ints)]) 
len=length(unique(duplicated(dup))) 

я получаю:

> dup 
#[1] 15, 32 

> len 
#[1] 2 

но то, что мне нужно:

> dup 
#[1] 15, 32 

> len 
#[1] 5 

Спасибо!

ответ

2

Вы можете рассчитывать частоты с

table(a) 
# a 
# 15 27 32 63 99 
# 2 1 3 1 1 

Вы можете отфильтровать только найти дубликаты

Filter(function(x) x>1, table(a)) 
# a 
# 15 32 
# 2 3 
names(Filter(function(x) x>1, table(a))) 
# [1] "15" "32" 

и вы можете взять сумму, чтобы найти общую длину дублей

sum(Filter(function(x) x>1, table(a))) 
# [1] 5 
3

Предложение Аруна в комментариях - это путь:

> sum(a %in% c(15,32)) 
#[1] 5 

Для более общего использования:

sum(a %in% unique(a[duplicated(a)])) 

Или один-лайнер в духе подхода г-Флик:

sum(a %in% names(which(table(a) > 1))) 
2

Другой вариант, чтобы захватить все дублированные значения затем использовать length() для len и unique() за dup

x <- a[duplicated(a) | duplicated(a, fromLast=TRUE)] 

length(x) 
# [1] 5 
unique(x) 
# [1] 15 32 
Смежные вопросы