Удалить строки со столбцами, имеющими значения от -1 до 1 в R - PullRequest
2 голосов
/ 10 марта 2020

У меня есть кадр данных в R, который выглядит следующим образом:

   V1         T1         T2         T3         T4        T5
  CXCL6  0.8536601  1.0903336  3.7633042  5.5800459 5.8477150
  PPBP  0.7739450  0.3587961  0.5073359  0.2743522 0.6221722
  CXCL10  0.1258370 -0.3535165 -0.7460387  3.5604672 0.1971432
  CXCL11 -0.2563139  0.7117200  0.0000000 -0.2288303 0.9955557
  CXCL12  0.6181279  1.7529310  1.7637760  1.2752787 1.2284810

Я хочу удалить строки, значения которых находятся в диапазоне от -1 до 1.

Я пробовал эту команду но, к сожалению, это не работает.

condition1 <- Genes[,c(2:6)] >=-1 & Genes[,c(2:6)] <=1
Genes <- Genes[condition1,]

Может кто-нибудь сказать мне, где я не прав, чтобы я мог успешно отфильтровать мой фрейм данных.

Ответы [ 5 ]

4 голосов
/ 10 марта 2020

Вы можете использовать all в apply для подмножества Гены и удалить строки со столбцами, имеющие все значения от -1 до 1 .

Genes[!apply(Genes[-1] >= -1 & Genes[-1] <= 1, 1, all),]
#      V1        T1         T2         T3       T4        T5
#1  CXCL6 0.8536601  1.0903336  3.7633042 5.580046 5.8477150
#3 CXCL10 0.1258370 -0.3535165 -0.7460387 3.560467 0.1971432
#5 CXCL12 0.6181279  1.7529310  1.7637760 1.275279 1.2284810

или используя any:

Genes[apply(Genes[-1] < -1 | Genes[-1] > 1, 1, any),]

или используя rowSums:

Genes[rowSums(Genes[-1] < -1 | Genes[-1] > 1) > 0,]
2 голосов
/ 10 марта 2020
library(dplyr)

Genes %>%
  filter_if(is.numeric, any_vars(abs(.) > 1))

      V1        T1         T2         T3       T4        T5
1  CXCL6 0.8536601  1.0903336  3.7633042 5.580046 5.8477150
2 CXCL10 0.1258370 -0.3535165 -0.7460387 3.560467 0.1971432
3 CXCL12 0.6181279  1.7529310  1.7637760 1.275279 1.2284810
2 голосов
/ 10 марта 2020

Вы можете использовать dplyr:

df %>% 
  dplyr::filter_at(vars(T1:T5), ~ !dplyr::between(., -1, 1))
0 голосов
/ 10 марта 2020

Вот быстрый способ с базой R -

Genes[rowSums(abs(Genes[, -1]) > 1) > 0, ]

      V1        T1         T2         T3       T4        T5
1  CXCL6 0.8536601  1.0903336  3.7633042 5.580046 5.8477150
3 CXCL10 0.1258370 -0.3535165 -0.7460387 3.560467 0.1971432
5 CXCL12 0.6181279  1.7529310  1.7637760 1.275279 1.2284810
0 голосов
/ 10 марта 2020

Вот data.table -приход

пример данных

library(data.table)
library(matrixStats)
DT <- fread("V1         T1         T2         T3         T4        T5
CXCL6  0.8536601  1.0903336  3.7633042  5.5800459 5.8477150
PPBP  0.7739450  0.3587961  0.5073359  0.2743522 0.6221722
CXCL10  0.1258370 -0.3535165 -0.7460387  3.5604672 0.1971432
CXCL11 -0.2563139  0.7117200  0.0000000 -0.2288303 0.9955557
CXCL12  0.6181279  1.7529310  1.7637760  1.2752787 1.2284810")

код

DT[ !DT[, rowMins( as.matrix(.SD)) > -1 & rowMaxs(as.matrix(.SD)) < 1, 
    .SDcols = patterns("^T")], ]

вывод

       V1        T1         T2         T3       T4        T5
1:  CXCL6 0.8536601  1.0903336  3.7633042 5.580046 5.8477150
2: CXCL10 0.1258370 -0.3535165 -0.7460387 3.560467 0.1971432
3: CXCL12 0.6181279  1.7529310  1.7637760 1.275279 1.2284810
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...