2012-05-16 2 views
3

Мне предоставлен файл с сотнями тысяч значений, непоследовательно отформатированный в файле .CSV. Структура может выглядеть следующим образом:Возврат списка подсчитанных, уникальных элементов

А, В, С, D
Е, F
G, H, I, J, К, L, М, N, О
Р, Q, R, S

И так далее.

Все, что мне нужно сделать, это: а) перечислить уникальные значения и b) подсчитать их одинаковые. Приятно делать это в R, Excel или любом другом рекомендованном инструменте.

Обычно я использую что-то вроде функций Google Docs '= UNIQUE и = COUNT, но таблица слишком велика для загрузки там. И я не нашел точных эквивалентов в Excel, как ни странно.

Любая помощь приветствуется.

ответ

5

Если я правильно понимаю, это должно работать (в R):

# Emulate your file 
cat('A,B,C,D\nB,D\nA,A,F,Q,F\n', file='foo.csv') 

x <- scan('foo.csv', what='', sep=',') 
table(x) 
#x 
#A B C D F Q 
#3 2 1 2 2 1 
+0

Благословите вас, которые работали как чемпион! Написал его в .csv, используя write.csv(), и я отправился на гонки. Большое спасибо! – sogrady

0

Так как вы сказали «любой другой инструмент»:

%perl -F',' -a -n -e 'chomp, $count{$_}++ foreach (@F); END {print "$_: $count{$_}\n" foreach sort keys %count;}' 
0

Я предполагаю, что вы знаете, как импортировать данные в Р? Что-то вроде read.csv должно работать ... Не вдаваясь применять-тип функции, вы можете сделать простой цикл для поиска подсчетов уникальных значений (например, буквы):

set.seed(1) 

OBJ <- LETTERS[round(runif(1000, min=1, max=26))] 
VALS <- unique(OBJ) 
VALS 
COUNTS <- rep(0*length(VALS)) 
for(i in seq(VALS)){ 
    COUNTS[i] <- length(which(OBJ==VALS[i])) 
} 

data.frame(VALS, COUNTS) 
Смежные вопросы