Как удалить строки, если два условия репликации имеют ноль?

avatar
PraveenKumar
8 августа 2021 в 20:46
161
2
0

У меня есть такие данные, как два условия (условие 1, условие 2) и каждое условие с шестью повторениями. Я хотел бы отказаться, если три из двух реплик условия 1 имеют ноль в строке (выборка/строка).

gene_name   con1_1 con1_2 con1_3 con2_1 con2_2  con2_3
YLZC_aa4043 251.0000    233    116     61     79  73.000
YLZC_aa4046   0           0      1      1      1  53.000
YLZC_aa4048  26.0133    232.296  0      0      232.296
YLZC_aa4050   0           0      0     36     20   0.000

Я ожидаю такой результат

gene_name    con1_1   con1_2 con1_3 con2_1 con2_2  con2_3
YLZC_aa4043 251.0000    233    116     61     79  73.000
YLZC_aa4048  26.0133    232.296  0      0      232.296

И я относительно новичок в R

Я знаю, как это сделать по одному, но я хотел бы сделать это с помощью dplyr. Поэтому я попытался с dplyr. Но не смог закончить, я немного застрял. может кто-нибудь помочь мне

data %>% select(2:4) %>% select_if(rowSums == 0)
Источник

Ответы (2)

avatar
ThomasIsCoding
8 августа 2021 в 20:59
3

Обновление

Согласно вашему обновлению, вы можете попробовать

subset(df, rowSums(df[startsWith(names(df), "con1_")] == 0) <= 1)

Возможно, эта базовая опция R с использованием rowSums + startsWith может помочь

> subset(df, rowSums(df[startsWith(names(df), "con1_")] == 0) == 0)
    gene_name con1_1 con1_2 con1_3 con2_1 con2_2 con2_3
1 YLZC_aa4043    251    233    116     61     79     73
PraveenKumar
8 августа 2021 в 21:26
0

Очень признателен. У меня общий вопрос. Где можно попрактиковаться в этом. Потому что учебники, на которые я ссылался, были своего рода базовыми. Я хотел бы получить некоторую тяжелую основную практику. Итак, не могли бы вы предложить некоторые данные и практические советы по очистке данных и обработке данных.

ThomasIsCoding
8 августа 2021 в 21:29
0

@PraveenKumar Я думаю, Stack Overflow — это то место, которое вы ищете.

PraveenKumar
8 августа 2021 в 21:32
0

Отлично. Но здесь я могу прийти, чтобы получить решение. Я хотел бы попрактиковаться. Любые книги или что-то..

ThomasIsCoding
8 августа 2021 в 21:34
0

@PraveenKumar Я думаю, есть много онлайн-ресурсов, вы все равно можете найти тот, который вам больше всего подходит.

PraveenKumar
8 августа 2021 в 21:35
0

Спасибо за предложение

PraveenKumar
9 августа 2021 в 07:17
0

Но я хотел бы отказаться от трех из двух столбцов условия 1, у которых есть ноль. Как я могу реализовать это. Я отредактировал свой вопрос.

avatar
akrun
8 августа 2021 в 20:47
3

Мы могли бы использовать

library(dplyr)
df1 %>%
    filter(rowSums(select(cur_data(), starts_with('con1')) != 0) > 1)
    gene_name con1_1 con1_2 con1_3 con2_1 con2_2 con2_3
1 YLZC_aa4043    251    233    116     61     79     73

данные

df1 <- structure(list(gene_name = c("YLZC_aa4043", "YLZC_aa4046", "YLZC_aa4048", 
"YLZC_aa4050"), con1_1 = c(251, 0, 26.0133, 0), con1_2 = c(233L, 
0L, 0L, 0L), con1_3 = c(116L, 1L, 0L, 0L), con2_1 = c(61L, 1L, 
0L, 36L), con2_2 = c(79L, 1L, 0L, 20L), con2_3 = c(73, 53, 232.296, 
0)), class = "data.frame", row.names = c(NA, -4L))
Martin Gal
8 августа 2021 в 20:55
0

Почему часть starts_with("con2")? Если я прав, условие 2 не влияет на фактический вопрос: "отбросить, если условие 1 соответствует трем из двух"

akrun
8 августа 2021 в 20:56
1

@MartinGal Вы правы. Я думал, что это должно быть повторено. обновлен

PraveenKumar
8 августа 2021 в 21:04
0

Мой con2 является элементом управления, поэтому я выбираю строку на основе эксперимента. Не наоборот.