簡體   English   中英

將兩列強制為 1 列因子和 1 列 R 中數據框的相應值

[英]Coercing two columns into 1 column of factors and 1 column of corresponding values in R for data frame

所以我試圖將“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 列的名稱,這樣它給我一個列

colname = c("cluster_0_pct1", "cluster_0_pct2", "cluster_1_pct1", "cluster_1_pct2", 
                    "cluster_2_pct1","cluster_2_pct1")

並使用來自 pct1 或 pct2 列的相應值創建一個值列,具體取決於列名,即 cluster_1_pct1 的值應為 0.4。

任何幫助將不勝感激。

嘗試使用 dplyr 函數(如 rownames_to_column()、pivot_longer 等)時,我有點走運了。

我們可以使用“pct.1”、“pct.2”在pivot_longer指定為“cols”並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 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM