Основы работы с категориями

Вопросы по статистическому пакету R. Не обязательно гео.
Ответить
KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Основы работы с категориями

Сообщение KolesovDmitry » 12 мар 2009, 17:43

Начал присматриваться к R, не могу решить простую задачку:
Дано: несколько текстовых файлов, содержащих перечисления некоторых категорий (категории в разных файлах могут быть разными, могут и частично совпадать). Например, файлы f1 и f2:
f1:

Код: Выделить всё

Иванов
Петров
Сидоров
Иванов
Иванов
Петров
f2:

Код: Выделить всё

Сидоров
Сидоров
Кошкин
Мышкин
Шишкин
Иванов
Нужно прочитать значения категорий из файлов и составить общую таблицу, в которой описна частота встречаемости категории в каждом файле:

Код: Выделить всё

Файл Иванов Петров Сидоров Кошкин Мышкин Шишкин
f1	0.5		0.333	0.1666	0	0	0
f2	0.1666	0		0.333	0.1666	0.1666	0.1666
Как читать данные из файла и как собрать набор категорий этого файла в кучу (похоже, они сами собой собираются и тогда вторая строка не нужна?) более-менее понятно:

Код: Выделить всё

f1=read.table('f1.txt')
f1.fact=factor(x[[1]])
Даже можно посмотреть число категорий и сколько раз они встречаются:

Код: Выделить всё

summary(f1.fact)
Не понятно:
  • 1) как объединить все категории разных файлов в одну таблицу
    2) как расчитать частоты

Аватара пользователя
Максим Дубинин
MindingMyOwnBusiness
Сообщения: 9128
Зарегистрирован: 06 окт 2003, 20:20
Репутация: 747
Ваше звание: NextGIS
Откуда: Москва
Контактная информация:

Re: Основы работы с категориями

Сообщение Максим Дубинин » 12 мар 2009, 19:12

1. если я правильно понял первый вопрос, то считать f1 и f2 и сделать res = rbind(f1,f2)
2. частоты посчитать можно с помощью table()
пристегивайтесь, турбулентность прямо по курсу

KolesovDmitry
Гуру
Сообщения: 810
Зарегистрирован: 22 авг 2007, 14:58
Репутация: 123
Откуда: Казань

Re: Основы работы с категориями

Сообщение KolesovDmitry » 16 мар 2009, 11:15

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

Код: Выделить всё

# создаем список файлов:
files=dir(pattern=".+.txt")
len=length(files) # запомним количество файлов для удобства работы

# заполним texts содержимым файлов,
# а в res положим все встретившиеся категории:
texts=list()
f=read.table(files[1])
res=f
texts[1]=f
for (i in 2:len) {
    print(files[i])
    f=read.table(files[i])
    texts[i]=f
    res=rbind(res,f)
}
res=unique(res)
res=sort(res[[1]])

# заполним таблицу частот:
d=list()
for (i in 1:len) {
    x=as.character(texts[i][[1]])
    d[[i]]=table(factor(x,levels=res))/length(x)
}

# Удалим вспомогательные переменные:
rm(texts)
rm(res)
rm(f)
rm(x)

Ответить

Вернуться в «R»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость