在R上的数据帧中,将一行中的每2个值逐行堆叠/重新排列为2列



我希望我能把自己解释到我的问题有意义的地步!我在这个问题上坚持了好几个小时。

我有一个数据帧,其中列是基因(基因a、基因b、基因c等(,行是两种条件下的细胞簇(簇a_ctrl、簇a_exp、簇b_ctrl等(

我想要的:我想要相反的方式(但不是转置!(,这样列是簇(簇a、簇b、簇c等(,行是两种条件下的基因(基因a_ctrl、基因a_exp、基因b_ctrl等(

谢谢你的帮助!

首先,一些伪数据:

df1 <- data.frame(cluster = c("clustera_ctrl", "clustera_exp", "clusterb_ctrl", "clusterb_exp"),
gene_a = 1:4,
gene_b = 5:8,
gene_c = 9:12)
cluster gene_a gene_b gene_c
1 clustera_ctrl      1      5      9
2  clustera_exp      2      6     10
3 clusterb_ctrl      3      7     11
4  clusterb_exp      4      8     12

使用tidyr中的separate、pivot_lenger和pivot_wider来接近。我认为有一个pivot_longer的更短的方法,但这应该足够清楚。

library(tidyverse)
df1 %>%
separate(cluster, c("cluster", "type"), sep = "_") %>%
pivot_longer(starts_with("gene")) %>%
pivot_wider(names_from = c(name, type), values_from = value)

# A tibble: 2 × 7
cluster  gene_a_ctrl gene_b_ctrl gene_c_ctrl gene_a_exp gene_b_exp gene_c_exp
<chr>          <int>       <int>       <int>      <int>      <int>      <int>
1 clustera           1           5           9          2          6         10
2 clusterb           3           7          11          4          8         12

最新更新