我希望我能把自己解释到我的问题有意义的地步!我在这个问题上坚持了好几个小时。
我有一个数据帧,其中列是基因(基因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