2015-12-05 2 views
0

Я начинаю с R, и иногда это немного сложно для меня. У меня есть большой кадр данных из 100000 наблюдений, и в этом фрейме данных у меня есть идентификатор столбца, и мне нужно вычислить самый частый идентификатор в столбце. Но проблема заключается в том, что иногда в отдельной строке есть отдельный идентификатор «&». я собираюсь держать Exemple это проще:Как вычислить частоту с разной длиной строки

id    value 
1    1 
1    2 
2&3&4   6 
2&5&7&8   1 
2&4&5   3 
2    3 

Итак, я должен получить 2
Там не может быть до 20 «&» в строке.

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

+0

ли столбец 'value' предназначен для использования? Я не очень понимаю это – etienne

+0

Извините, tt может быть одинаковым id отдельно от '&' тоже! –

+0

Нет, мы просто используем идентификатор столбца, но я думал, что вам нужен 2 столбца для формирования фрейма данных. –

ответ

2

данные, как представляется, это:

df<-structure(list(id = structure(c(1L, 1L, 3L, 5L, 4L, 2L), .Label = c("1", 
"2", "2&3&4", "2&4&5", "2&5&7&8"), class = "factor"), value = c(1L, 
2L, 6L, 1L, 3L, 3L)), .Names = c("id", "value"), class = "data.frame", row.names = c(NA, 
-6L)) 

Первого шаг должен иметь вектор со всеми ids:

unlist(strsplit(as.character(df[,1]),'&')) 
# [1] "1" "1" "2" "3" "4" "2" "5" "7" "8" "2" "4" "5" "2" 

тогда мы получим частоту :

table(unlist(strsplit(as.character(df[,1]),'&'))) 

# 1 2 3 4 5 7 8 
# 2 4 1 2 2 1 1 

, а затем мы Diplay числа с самой высокой частотой (таблица упорядочена в порядке убывания):

names(sort(table(unlist(strsplit(as.character(df[,1]),'&'))),decreasing=T)[1]) 
# [1] "2" 
Смежные вопросы