Выберите столбцы на основе суммы - PullRequest
0 голосов
/ 01 июня 2019

У меня есть фрейм данных со многими столбцами генов и строк, например

id  treatment   time    gene1   gene2   gene3   …
1   A   1   2   0   2   …
2   A   2   0   0   3   …
3   A   3   0   0   4   …
4   B   4   0   0   0   …
5   B   5   0   0   2   …
6   B   3   1   0   1   …
7   C   5   0   0   2   …

Я хотел бы сохранить все столбцы (в примере данных три, но в реальных данных много столбцов) и столбцы генов с суммой больше 0.

Буду признателен за любую помощь по моему вопросу. Большое спасибо!

1 Ответ

1 голос
/ 01 июня 2019

Я не совсем уверен, хотите ли вы сохранить строки или столбцы с суммой записей> 0.

В случае первого, вы можете использовать rowSums, например,

df[rowSums(df[, grep("gene", names(df))]) > 0, ]
#id treatment time gene1 gene2 gene3
#1  1         A    1     2     0     2
#2  2         A    2     0     0     3
#3  3         A    3     0     0     4
#5  5         B    5     0     0     2
#6  6         B    3     1     0     1
#7  7         C    5     0     0     2

Или, чтобы сохранить только те столбцы с суммой записей> 0, вы можете использовать colSums

df[, names(df) %in% c(
    names(df)[grep("gene", names(df), invert = T)],
    names(which(colSums(df[, grep("gene", names(df))]) > 0)))]
#  id treatment time gene1 gene3
#1  1         A    1     2     2
#2  2         A    2     0     3
#3  3         A    3     0     4
#4  4         B    4     0     0
#5  5         B    5     0     2
#6  6         B    3     1     1
#7  7         C    5     0     2

Это предполагает, что все генные столбцы содержат слово "gene" (и все негенные столбцы содержат , а не , содержащие слово "gene").

Или, более кратко (спасибо @Shree),

df[, c(rep(T, 3), colSums(df[, -c(1:3)]) > 0)]

, что предполагает, что первые 3 столбцане генные столбцы (а все остальные столбцы - это генные столбцы).


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

df <- read.table(text =
    "id  treatment   time    gene1   gene2   gene3
1   A   1   2   0   2
2   A   2   0   0   3
3   A   3   0   0   4
4   B   4   0   0   0
5   B   5   0   0   2
6   B   3   1   0   1
7   C   5   0   0   2", header = T)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...