将两列强制转换为 R 中的 1 列因子和 1 列对应值用于数据框
Posted
技术标签:
【中文标题】将两列强制转换为 R 中的 1 列因子和 1 列对应值用于数据框【英文标题】:Coercing two columns into 1 column of factors and 1 column of corresponding values in R for data frame 【发布时间】:2020-05-28 16:24:06 【问题描述】:所以我正在尝试将“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 列中的相应值创建一个 value 列,具体取决于 colname,即 cluster_1_pct1 的值应为 0.4。
任何帮助将不胜感激。
我在尝试使用 dplyr 函数(如 rownames_to_column()、pivot_longer ... 等)时运气不佳。
【问题讨论】:
【参考方案1】:我们可以将'pct.1'、'pct.2'在pivot_longer
和paste
'cluster'、'name'列中指定为'cols'重塑为'long'格式以创建'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 )
【讨论】:
以上是关于将两列强制转换为 R 中的 1 列因子和 1 列对应值用于数据框的主要内容,如果未能解决你的问题,请参考以下文章