фильтрация больших наборов данных для исключения одинакового элемента во всех столбцах - PullRequest
1 голос
/ 01 июля 2011

Я относительно новый пользователь R, и большая часть сложного кодирования (и пакетов) для меня выглядит как греческий.Прошло много времени с тех пор, как я использовал язык программирования (Java / Perl), и в прошлом я использовал R только для очень простых манипуляций (базовая загрузка данных из файла, подмножество, ANOVA / T-Test).Однако я работаю над проектом, в котором у меня не было контроля над макетом данных, а файл данных очень длинный.

В моих данных у меня 172 строки, в которых содержится Участник опроса, и 158 столбцов,каждый из которых представляет номер вопроса.Ответы для каждого 1-5.Необработанные данные включают число «99», указывающее, что на вопрос не было ответа.Мне нужно исключить любые вопросы, на которые участник не ответил, не исключив всего участника.

Part  Q001  Q002  Q003  Q004
1      2      4    99    2
2      3      99   1     3
3      4      4    2     5
4      99     1    3     2
5      1      3    4     2

В прошлом я использовал функцию подмножества для фильтрации своих данных data.filter <- подмножество (data, Q001! = 99) Что отлично работает, когда я работаю с наборами, где все мои ответы содержатся в одном столбце.Тогда это будет просто удалить всю строку, где ответ не был доступен. </p>

Однако, с ответами в этом наборе, распределенными по 158 столбцам, если я выберу 99 из столбца 1 (Q001), я также отфильтруювесь этот участник.

Я хотел бы знать, есть ли способ фильтрации / подмножества данных таким образом, чтобы мой большой набор данных в конечном итоге имел «пробелы», когда «99» произошло так, что эти 99не будет раздувать или иным образом мешать статистике, которую я использую для остальных чисел.Мне нужно уметь вычислять средние значения по каждому вопросу и проводить ANOVA и T-тесты по различным вопросам.

Resp  Q001  Q002  Q003  Q004
1      2      4          2
2      3           1     3
3      4      4    2     5
4             1    3     2
5      1      3    4     2

Возможно ли это сделать в R?Я пытался отфильтровать его перед отправкой в ​​R, но он не будет читать файл данных, когда у меня есть пробелы, и я хотел бы иметь возможность использовать весь набор данных без создания подмножества для каждого вопроса (которыйЯ сделаю, если мне придется ... это просто отнимает много времени, если есть лучший код или пакет для использования)

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

3 голосов
/ 01 июля 2011

Вы можете заменить «99» на «NA», и вычислить colMeans, опуская NA:

df <- replicate(20, sample(c(1,2,3,99), 4))
colMeans(df) # nono

dfc <- df
dfc[dfc == 99] <- NA
colMeans(dfc, na.rm = TRUE) 
2 голосов
/ 01 июля 2011

Вы также можете указать, какие значения являются NA, когда вы читаете свою базу данных.Для вашего конкретного случая:

mydata <- read.table('dat_base', na.strings = "99")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...