Как добавить строку на основе других строк? - PullRequest
1 голос
/ 03 июня 2019

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

treatment   gene1   gene2   gene3   …
A   0   3   0   …
A   0   0   0   …
A   0   0   0   …
A   1   1   0   …
A   0   0   0   …
B   0   1   1   …
B   0   5   2   …
B   0   0   3   …
B   0   0   0   …
…   …   …   …   

Я хотел бы иметь следующий фрейм данных на основе правила: если значения каждого гена для каждой обработки равны 0значение этого гена для этого лечения составляет 0 (например, ген 1 для лечения A), в противном случае 1 (например, ген 1 для лечения B).Таким образом, новый фрейм данных будет следующим фреймом данных.

treatment   gene1   gene2   gene3   …
A   1   1   0   …
B   0   1   1   …
…   …   …   …   …

Большое спасибо за вашу помощь.

Ответы [ 2 ]

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

С dplyr вы можете сделать:

df %>%
 group_by(treatment) %>%
 summarise_all(list(~ as.integer(any(.))))

  treatment gene1 gene2 gene3
  <fct>     <int> <int> <int>
1 A             1     1     0
2 B             0     1     1

То же самое с base R:

aggregate(. ~ treatment, FUN = function(x) as.integer(any(x)), data = df)
0 голосов
/ 03 июня 2019

Опция с base R

+(rowsum(df[-1], df$treatment) > 0)
#    gene1 gene2 gene3
#A     1     1     0
#B     0     1     1

data

df <- structure(list(treatment = c("A", "A", "A", "A", "A", "B", "B", 
"B", "B"), gene1 = c(0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L), gene2 = c(3L, 
0L, 0L, 1L, 0L, 1L, 5L, 0L, 0L), gene3 = c(0L, 0L, 0L, 0L, 0L, 
1L, 2L, 3L, 0L)), class = "data.frame", row.names = c(NA, -9L
))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...