首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在R上的数据中,将一行中的每2个值堆叠/重新排列成2列,逐行排列

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

Stack Overflow用户
提问于 2022-10-14 18:36:34
回答 1查看 18关注 0票数 0

我希望我能解释清楚我的问题是有道理的!被困在这上面好几个小时了。

我所拥有的:数据栏是基因(基因a,基因b,基因c,等等)。行是在两种条件下的单元簇(集群a_ctrl、集群a_exp、clusterb_ctrl等)。

我想要的是:我想要的是相反的方式(但不是换位!)因此,列是集群(集群a、集群b、集群c等)。行为基因a_ctrl、基因a_exp、基因b_ctrl等两种条件下的基因。

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

发布于 2022-10-14 19:16:21

首先,一些假数据:

代码语言:javascript
复制
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

方法使用独立的、pivot_longer和pivot_wider与tidyr。我认为使用一个pivot_longer有一种更短的方法,但这一点应该足够清楚。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74073487

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档