r - Pivot_longer 6 列至 3 列

标签 r dataframe dplyr pivot

我知道我的问题很简单,但我整个早上都在尝试,但我无法解决这个问题。

我有这个数据框:

  GeneID Gene.Symbol01    Ratio.2h   Ratio.6h  Ratio.10h  Ratio.24h  Pvalue_2h
 1    174           FUT -0.23618761 -0.3276162 -0.1366940 -4.4899131 0.49045105
  Pvalue_6h Pvalue_10h   Pvalue_24h
 1 0.06128851 0.59995612 0.0001798584

我需要对除 GeneID 和 GeneSymbol 之外的所有列进行透视。生成的数据框应该有 3 个新列。一种时间:2小时、6小时、10小时和24小时。然后另外两列包含比率值,另一列包含 p 值。

我知道这应该通过名称_to 和名称_模式的组合来完成。 我已经尝试了很多东西,但我无法得到它。

我最后尝试的是:

pivot_longer(cols = -c(GeneID, Gene.Symbol01),
             names_to = c("Time", ".value"),
             names_pattern = "_")

输出:

structure(list(GeneID = 174, Gene.Symbol01 = "FUT", Ratio.2h = -0.23618761, 
    Ratio.6h = -0.3276162, Ratio.10h = -0.136694, Ratio.24h = -4.4899131, 
    Pvalue_2h = 0.49045105, Pvalue_6h = 0.06128851, Pvalue_10h = 0.59995612, 
    Pvalue_24h = 0.0001798584), row.names = c(NA, -1L), class = c("tbl_df", 
"tbl", "data.frame"))

最佳答案

使用tidyverse,您可能希望将pivot_longerRatio.2hPvalue_24h的所有变量,然后它分成两列。

library(tidyverse)

DF %>% 
  pivot_longer(Ratio.2h:Pvalue_24h, names_to = "var") %>%
  separate(var, into = c("type", "time"), sep = "_|\\.")

# # A tibble: 8 x 5
#   GeneID Gene.Symbol01 type   time      value
#    <dbl> <chr>         <chr>  <chr>     <dbl>
# 1    174 FUT           Ratio  2h    -0.236   
# 2    174 FUT           Ratio  6h    -0.328   
# 3    174 FUT           Ratio  10h   -0.137   
# 4    174 FUT           Ratio  24h   -4.49    
# 5    174 FUT           Pvalue 2h     0.490   
# 6    174 FUT           Pvalue 6h     0.0613  
# 7    174 FUT           Pvalue 10h    0.600   
# 8    174 FUT           Pvalue 24h    0.000180

然后,使用pivot_wider将其改回更宽的格式

DF %>% 
  pivot_longer(Ratio.2h:Pvalue_24h, names_to = "var") %>%
  separate(var, into = c("type", "time"), sep = "_|\\.") %>%
  pivot_wider(names_from = "type", values_from = "value")

# # A tibble: 4 x 5
#   GeneID Gene.Symbol01 time   Ratio   Pvalue
#    <dbl> <chr>         <chr>  <dbl>    <dbl>
# 1    174 FUT           2h    -0.236 0.490   
# 2    174 FUT           6h    -0.328 0.0613  
# 3    174 FUT           10h   -0.137 0.600   
# 4    174 FUT           24h   -4.49  0.000180

数据

DF <- tribble(~GeneID, ~Gene.Symbol01,  ~Ratio.2h,   ~Ratio.6h, ~Ratio.10h, ~Ratio.24h, ~Pvalue_2h,~Pvalue_6h, ~Pvalue_10h,   ~Pvalue_24h,
              174, "FUT", -0.23618761, -0.3276162, -0.1366940, -4.4899131, 0.49045105,0.06128851, 0.59995612, 0.0001798584)

关于r - Pivot_longer 6 列至 3 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60954418/

相关文章:

r - ggplot2 相当于基本图中的lines()函数

r - 3 级逻辑回归

r - 使用 dplyr 有条件地将一列中的值替换为另一列中的值

python - 当使用 Group By 进行日期并计算该期间内的事件时,Pandas 从周日开始一周

python - 如何加入/合并数据集?

pandas - 在pandas hdf5中保存数据时的宽格式与长格式

r - 总结函数 dplyr 持续出错

r - R3.3.2 中的错误 : evaluation nested too deeply: infinite recursion/options(expressions=)?

r - 如何使用dplyr查找R数据框中两行中的值之间的差异

r - 如何根据另一列中较大的值过滤行?