#r #dataframe
#r #фрейм данных
Вопрос:
У меня есть следующий фрейм данных:
> df
GENE ID EXPR1 EXPR2
ENS127 1122O 1.2 1.2
ENS127 1122O 2.3 1.0
ENS555 33212 4.5 3.9
ENS555 33212 1.2 3.7
ENS941 44444 2.3 3.6
Я ищу способ объединить все строки с похожим геном в одну, чтобы для каждого уникального ГЕНА была только одна строка, содержащая все значения третьего столбца и далее. Это будет повторяться до конца большого фрейма данных.
Результат будет выглядеть следующим образом:
> df.output
GENE ID EXPR1 EXPR2 EXPR.01 EXPR.02
ENS127 1122O 1.2 1.2 2.3 1.0
ENS555 33212 4.5 3.9 1.2 3.7
ENS941 44444 2.3 3.6 NA NA
Я ценю любую помощь.
Ответ №1:
Вы можете получить данные в длинном формате, чтобы все EXPR
значения были в одном столбце, создать уникальные имена столбцов для каждого GENE
, а затем получить данные в широком формате.
library(dplyr)
library(tidyr)
df %>%
pivot_longer(cols = starts_with('EXPR')) %>%
group_by(GENE, name) %>%
mutate(name = paste(name, row_number(), sep = '_')) %>%
pivot_wider()
# GENE ID EXPR1_1 EXPR2_1 EXPR1_2 EXPR2_2
# <chr> <chr> <dbl> <dbl> <dbl> <dbl>
#1 ENS127 1122O 1.2 1.2 2.3 1
#2 ENS555 33212 4.5 3.9 1.2 3.7
#3 ENS941 44444 2.3 3.6 NA NA
данные
df <- structure(list(GENE = c("ENS127", "ENS127", "ENS555", "ENS555",
"ENS941"), ID = c("1122O", "1122O", "33212", "33212", "44444"
), EXPR1 = c(1.2, 2.3, 4.5, 1.2, 2.3), EXPR2 = c(1.2, 1, 3.9,
3.7, 3.6)), class = "data.frame", row.names = c(NA, -5L))
Комментарии:
1. спасибо, Ронак. Он выдает ошибку, которая гласит: Ошибка:
cols
необходимо выбрать хотя бы один столбец, однако использование функции starts_with имеет для меня смысл, похоже, не распознает шаблон строки.
Ответ №2:
Вот data.table
решение
library(data.table)
setDT(df)[, rid := rowid(GENE, ID)]
dcast(df, GENE ID ~ rid, sep = ".", value.var = c("EXPR1", "EXPR2"))
Выходной сигнал
GENE ID EXPR1.1 EXPR1.2 EXPR2.1 EXPR2.2
1: ENS127 1122O 1.2 2.3 1.2 1.0
2: ENS555 33212 4.5 1.2 3.9 3.7
3: ENS941 44444 2.3 NA 3.6 NA