#r #dataframe #dplyr
#r #фрейм данных #dplyr
Вопрос:
У меня есть данные.Фрейм, к которому я присоединился с помощью full_join() из dplyr. Это выглядит так:
View(df1)
Gene Pval Pval2
ZIC3 0.4123 0.4124
GLA *NA* 0.135
AFF2 0.003 *NA*
... ... ...
Я хочу извлечь все гены, где Pval != Pval2, поэтому я использовал
DF2 <- DF1[DF1$Pval != DF1$Pval2, ]
Это привело к удалению несоответствующих записей (294), но DF2 также содержит 38 дополнительных строк, и все NA
это несмотря на то, что DF1 не содержит полных NA
строк. (всего 332)
Аналогично, если я сделаю
DF3 <- DF1[DF1$Pval == DF1$Pval2, ]
DF3 содержит 37 NA
строк. (13 711 непустых, всего 13 748)
DF1, оригинал, имеет 14042 строки.
Вопрос в том, что я не понимаю, откуда берутся эти пустые строки и почему числа в DF2, DF3 не складываются в DF1……
Ответ №1:
Мы также можем включить условие с is.na
DF1[(DF1$Pval != DF1$Pval2) | (is.na(DF1$Pval) |is.na(DF1$Pval2)), ]
Одна из проблем, которая может возникнуть, — это когда мы выполняем сравнение с плавающей запятой, поскольку точность может быть разной и приводит к неожиданному результату. Возможно, было бы лучше round
и сравнить
DF1[(round(DF1$Pval, 2) != round(DF1$Pval2, 2)) |
(is.na(DF1$Pval) | is.na(DF1$Pval2)), ]
Комментарии:
1. о, хорошо. позвольте мне попробовать это. МОЕЙ ГЛАВНОЙ ПРОБЛЕМОЙ БЫЛО НЕСООТВЕТСТВИЕ ЧИСЕЛ, НО ЭТО МОЖНО БЫЛО РЕШИТЬ С ПОМОЩЬЮ ЭТОГО. извините за заглавные буквы
2. Я думаю, меня беспокоит только то, что если значение было NA в одном анализе, а не NA в другом, это все равно разница, и я хотел бы извлечь эту запись
3. @SkyScraper в этом случае используйте
|
вместоamp;
обновленного сообщения4. округление может быть проблемой, и это было бы важной встречной мерой, но теперь у меня возникла проблема с тем, что в одном из столбцов отображается научная нотация, а в другом — нет, несмотря на то, что оба они были изменены на числовые с использованием «as.numeric»
5. @Небоскреб, который вы можете изменить
options(scipen = 999)
. Это проблема с форматированием печати