Сравнение значений ячеек в строках данных.Фрейм — озадачивающий вывод

#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) . Это проблема с форматированием печати