Приведение двух столбцов в 1 столбец факторов и 1 столбец соответствующих значений в R для фрейма данных - PullRequest
1 голос
/ 13 февраля 2020

Итак, я пытаюсь изменить фрейм данных формата "a" на фрейм данных формата "b".

т.е. фрейм данных "a" в качестве входных данных и фрейм данных "b" в качестве выходных.

a <- data.frame(rowname = c("gene_a","gene_b","gene_c"),
            p_val = c(1, 1, 1),
            p_val_adj = c("1","1","1"),
            cluster = c(0, 1, 2),
            pct.1 = c(0.4, 0.4, 0.4),
            pct.2 = c(0.6, 0.6, 0.6))

b <- data.frame(rowname = c("gene_a", "gene_a", "gene_b", "gene_b", "gene_c", "gene_c"),
            colname = c("cluster_0_pct1", "cluster_0_pct2", "cluster_1_pct1", "cluster_1_pct2", 
                        "cluster_2_pct1","cluster_2_pct1"),
            values = c(0.4, 0.6, 0.4, 0.6, 0.4, 0.6))

Чтобы описать это редактирование фрейма данных своими словами, я хочу объединить столбец кластера и имена столбцов pct.1 и pct.2 так, чтобы он дал мне столбец, подобный

* 1007. *

и создайте столбец значений с соответствующими значениями из столбцов pct1 или pct2 в зависимости от имени столбца, т. Е. Cluster_1_pct1 должен иметь значение 0,4.

Любая помощь будет принята с благодарностью.

Мне не повезло, я пытался использовать функции dplyr, такие как rownames_to_column (), pivot_longer ... et c.

1 Ответ

1 голос
/ 13 февраля 2020

Мы можем преобразовать в «длинный» формат с помощью «pct.1», «pct.2», указанных как «cols» в pivot_longer и paste столбцов «cluster», «name», чтобы создать «colname» '

library(dplyr)
library(tidyr)
library(stringr)
a %>%
     pivot_longer(cols = pct.1:pct.2) %>%
     transmute(rowname, colname = str_c('cluster_', cluster, name), values = value)
#  rowname        colname values
#1  gene_a cluster_0pct.1    0.4
#2  gene_a cluster_0pct.2    0.6
#3  gene_b cluster_1pct.1    0.4
#4  gene_b cluster_1pct.2    0.6
#5  gene_c cluster_2pct.1    0.4
#6  gene_c cluster_2pct.2    0.6

Или с gather

a %>%
    gather(key, values, pct.1:pct.2)  %>%
    transmute(rowname, colname = str_c('cluster_', cluster, key),values )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...