【问题标题】:Unpivoting dataframe反透视数据框
【发布时间】:2021-06-10 04:53:51
【问题描述】:

我有一个如下所示的数据框:data.frame name cond

CONDITION  CONT1 CONT2  CONT3 CONT4 
result      16.2  2.5   6.5   0.75
Test.ratio  0.23  0.15  2.5   3.5 

我想要得到的是:

CONDITION Result test.ratio
CONT1      16.2  0.62 
CONT2      2.5   0.15
CONT3      6.5   2.5 
CONT4      0.75  3.5

我试过使用融化功能,但没有用。

Cond.long <- melt(cond, idvar = "condition"))

我是 R 新手。

【问题讨论】:

  • 使用tidyrdf %&gt;% pivot_longer(cols = -CONDITION) %&gt;% pivot_wider(names_from = CONDITION, values_from = value)

标签: r unpivot melt


【解决方案1】:

这行得通吗:

library(dplyr)
library(tidyr)
df %>% pivot_longer(cols = starts_with('CONT')) %>% 
    pivot_wider(names_from = CONDITION) %>% select('CONDITION' = name, 2,3)
# A tibble: 4 x 3
  CONDITION result Test.ratio
  <chr>      <dbl>      <dbl>
1 CONT1      16.2        0.23
2 CONT2       2.5        0.15
3 CONT3       6.5        2.5 
4 CONT4       0.75       3.5 

【讨论】:

    【解决方案2】:

    基础

    df <- read.table(text = "CONDITION  CONT1 CONT2  CONT3 CONT4 
    result      16.2  2.5   6.5   0.75
    Test.ratio  0.23  0.15  2.5   3.5 ", header = T)
    new <- t(df[, -1]) 
    colnames(new) <- df[, 1]
    new
    #>       result Test.ratio
    #> CONT1  16.20       0.23
    #> CONT2   2.50       0.15
    #> CONT3   6.50       2.50
    #> CONT4   0.75       3.50
    

    reprex package (v1.0.0) 于 2021-03-12 创建

    【讨论】:

    • 类似方法:t("rownames&lt;-"(as.matrix(df[, -1]), df[[1]])).
    【解决方案3】:

    这是一个data.table 选项,使用dcase + melt

    > dcast(melt(setDT(df), id.vars = "CONDITION"), variable ~ CONDITION)
       variable Test.ratio result
    1:    CONT1       0.23  16.20
    2:    CONT2       0.15   2.50
    3:    CONT3       2.50   6.50
    4:    CONT4       3.50   0.75
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-12
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      相关资源
      最近更新 更多