Как удалить столбцы в соответствии с условиями одновременного - PullRequest
0 голосов
/ 27 апреля 2019

Мне нужно удалить столбцы (начиная со второго), имеющие значения, отличные от 0, только в строках, которые в первом столбце имеют определенные значения (например, sp3 и sp5).Мой набор данных большой, но здесь это небольшая выборка данных.

SP   id2324 id8283  id3912  id3912  id1231...
sp.1    0   2   4   1   0
sp.2    12  10  2   3   15
sp.3    0   0   23  0   4
sp.4    2   2   11  19  0
sp.5    0   0   0   0   3
sp.6    3   1   7   3   0
sp.7    0   14  1   0   12
sp.8    1   0   2   6   6

В этом небольшом примере я ожидаю, что переменные id3912 и id1231 исчезнут.

1 Ответ

0 голосов
/ 27 апреля 2019

Сначала можно выбрать строки, где SP равно c("sp.3", "sp.5"), а затем выбрать столбцы, в которых хотя бы одно значение отличается от 0.

cbind(df[1], df[-1][colSums(df[df$SP %in% c("sp.3", "sp.5"), -1] != 0) == 0])


#    SP id2324 id8283 id3912.1
#1 sp.1      0      2        1
#2 sp.2     12     10        3
#3 sp.3      0      0        0
#4 sp.4      2      2       19
#5 sp.5      0      0        0
#6 sp.6      3      1        3
#7 sp.7      0     14        0
#8 sp.8      1      0        6

Шаг за шагом разбивая

Выберите строки, где SP равно c("sp.3", "sp.5")

df[df$SP %in% c("sp.3", "sp.5"), -1]
#  id2324 id8283 id3912 id3912.1 id1231
#3      0      0     23        0      4
#5      0      0      0        0      3

Найти ячейки, где значение не равно 0

df[df$SP %in% c("sp.3", "sp.5"), -1] != 0
#  id2324 id8283 id3912 id3912.1 id1231
#3  FALSE  FALSE   TRUE    FALSE   TRUE
#5  FALSE  FALSE  FALSE    FALSE   TRUE

Найти столбцы, в которых все значения равны 0

colSums(df[df$SP %in% c("sp.3", "sp.5"), -1] != 0) == 0

#  id2324   id8283   id3912 id3912.1   id1231 
#    TRUE     TRUE    FALSE     TRUE    FALSE 

Затем мы выбираем столбцы, которые TRUE и cbind, они с 1-м столбцом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...