【问题标题】:Solidifying a melted data frame?固化融化的数据框?
【发布时间】:2012-04-26 00:49:55
【问题描述】:

假设我有一个融化的data.frame,看起来像这样:

  variable       value
1         A -0.19933093
2         A -1.19043346
3         A -1.32248172
4         A -1.98644507
5         A -0.07930953
6         B -0.10074686
7         B  0.72451483
8         B -0.40914044
9         B  0.02913376
10        B  0.16062491

我如何获得它:

  A       B
-0.19933093 -0.10074686
-1.19043346  0.72451483
-1.32248172 -0.40914044
-1.98644507  0.02913376
-0.07930953  0.16062491

似乎微不足道,但我对答案一无所知。 dcastacast 似乎没有这样做。我的目标是在更大的数据集上执行此操作,并将最终产品变成matrix,其中列名是变量名。我尝试玩daplylaply(在融化之前),但运气不佳。

【问题讨论】:

    标签: r reshape2


    【解决方案1】:

    试试unstack:

    dat <- read.table(text = "variable       value
    1         A -0.19933093
    2         A -1.19043346
    3         A -1.32248172
    4         A -1.98644507
    5         A -0.07930953
    6         B -0.10074686
    7         B  0.72451483
    8         B -0.40914044
    9         B  0.02913376
    10        B  0.16062491",sep = "",header = TRUE)
    
    > unstack(dat,value~variable)
    
                A           B
    1 -0.19933093 -0.10074686
    2 -1.19043346  0.72451483
    3 -1.32248172 -0.40914044
    4 -1.98644507  0.02913376
    5 -0.07930953  0.16062491
    

    但我应该补充一点,我很想知道如何使用 dcast 来做到这一点,因为我也反复尝试过,但都无法做到。

    【讨论】:

    • 我认为dcast 不添加另一列是不可能的,因为单独的variable 列不能唯一标识每个数据点。更宽松地说,它不知道将值放入哪一行。
    【解决方案2】:

    好的,从一个宽格式的数据框开始,其中包含一个 id。 melt() 给出长格式,然后dcast() 返回原始数据框。

    library(reshape2)
    df = read.table(text = "id   A   B
    1  1 -0.19933093 -0.10074686
    2  2 -1.19043346  0.72451483
    3  3 -1.32248172 -0.40914044
    4  4 -1.98644507  0.02913376
    5  5 -0.07930953  0.16062491", sep = "", header = TRUE)
    
    df
    
    df.melt = melt(df, "id")
    df.melt
    
    df.original = dcast(df.melt, id~variable)
    
    df.original
    

    【讨论】:

      【解决方案3】:

      使用acast() 返回一个矩阵。它需要一个 id 变量。

      library(reshape2)
      dat <- read.table(text = "variable       value
      1         A -0.19933093
      2         A -1.19043346
      3         A -1.32248172
      4         A -1.98644507
      5         A -0.07930953
      6         B -0.10074686
      7         B  0.72451483
      8         B -0.40914044
      9         B  0.02913376
      10        B  0.16062491",sep = "",header = TRUE)
      
      dat$id = rep(1:5, 2)
      dat
      
      acast(dat, id~variable)
      

      【讨论】:

      • 如果可能的话,在融化之前添加 id 会更容易。 (就像上面提到的那样,它似乎处于 OPs 的情况。)
      猜你喜欢
      • 2016-07-26
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2021-10-27
      • 2018-06-21
      • 1970-01-01
      相关资源
      最近更新 更多