Итак, у меня есть следующая функция изменения формы:
reshaped <- function(df){
df %>%
select(subjects, diseases) %>%
group_by(subjects, diseases) %>%
count() %>%
ungroup() %>%
spread(diseases, n, drop=TRUE)}
, которая существенно расширяет данные от длинных к широким, заполняя записи числом вхождений или значениями NA. Теперь, когда я распространяю это и печатаю в консоль, я получаю что-то вроде:
subject disease1 disease2 disease3 ...
1111111 2 3 1
1111112 21 4 2
1111115 2 1 15
1111117 1 3 1
Теперь проблема в том, что эти числа ложные. Субъект 1111111
не имеет 2 экземпляров disease1
или 3 экземпляров disease2
и т. Д. c. Все записи должны быть заполнены значениями NA. На самом деле, эти disease_1, disease2, disease3
являются супер-редкими заболеваниями, которые редко встречаются вообще по всем данным, но просто случаются первыми в алфавитном порядке (все начинаются с A).
Есть еще несколько вещей, о которых нужно знать. Во-первых, это очень большой набор данных с измененной версией, содержащей около 38 000 столбцов и 1,2 миллиона строк. Для обработки этих данных (порциями) я использую около 400 ГБ ОЗУ, а в сжатом формате RD весит около 117 ГБ. Я не получаю ошибок памяти, однако. Интересно, что когда я выбираю, скажем, случайные 100 000 предметов (строк), эта проблема исчезает. Цифры, которые я вижу, вполне реалистичны c (в основном, NA). Это говорит о том, что проблема не в самой функции или данных, а в размере наблюдения.
Кто-нибудь может подсказать, почему это может происходить или как я могу это решить? Для меня это выглядит как некоторая форма переполнения, когда R не знает, что делать, когда размер данных слишком велик, и просто помещает туда значения мусора. Проблема с этой гипотезой заключается в том, что эти значения, хотя и необоснованные, не являются полностью случайными. Все они меньше 10 или около того.