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

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

Genes     Sample1    Sample2   Sample3   Sample4
A1BG         14         59        11        31
A2M           0        7708       7306       0
A2ML1        64         71       1317       3406
A4GALT      142          0       1195       700
AAAS        1821       1233        0        959

Я хотел удалить столбцы на основе строки (Gene: A2M) с 0. Итак, если какой-либо из образцов с 0 для строки A2M должен быть удален. И вывод должен выглядеть следующим образом:

Genes     Sample2   Sample3   
A1BG         59        11      
A2M         7708       7306     
A2ML1        71       1317     
A4GALT        0       1195       
AAAS        1233        0     

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Мы можем использовать colSums, то есть

df[colSums(df[df$Genes == 'A2M',] == 0) == 0]

#   Genes Sample2 Sample3
#1   A1BG      59      11
#2    A2M    7708    7306
#3  A2ML1      71    1317
#4 A4GALT       0    1195
#5   AAAS    1233       0
0 голосов
/ 31 мая 2019

Опция с использованием tidyverse

library(tidyverse)
df1 %>% 
   filter(Genes == "A2M") %>% 
   select_if(~is.numeric(.x) & .x != 0) %>%
   names %>% 
   select(df1, .)
#  Sample2 Sample3
#1      59      11
#2    7708    7306
#3      71    1317
#4       0    1195
#5    1233       0

data

df1 <- structure(list(Genes = c("A1BG", "A2M", "A2ML1", "A4GALT", "AAAS"
), Sample1 = c(14L, 0L, 64L, 142L, 1821L), Sample2 = c(59L, 7708L, 
71L, 0L, 1233L), Sample3 = c(11L, 7306L, 1317L, 1195L, 0L), Sample4 = c(31L, 
0L, 3406L, 700L, 959L)), class = "data.frame", row.names = c(NA, 
-5L))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...