【问题标题】:Spread data table by id按id传播数据表
【发布时间】:2018-07-25 15:39:00
【问题描述】:

我有以下data.table:

> df
   month student A B  C  D
1:     1     Amy 9 6  1 11
2:     1     Bob 8 5  5  2
3:     2     Amy 7 7  2  4
4:     2     Bob 6 6  6  6
5:     3     Amy 6 8 10  7
6:     3     Bob 9 7 11  3

我想把这个data.table转换成这种格式:>df1

    month cols Amy Bob
 1:     1    A   9   8
 2:     1    B   6   5
 3:     1    C   1   5
 4:     1    D  11   2
 5:     2    A   7   6
 6:     2    B   7   6
 7:     2    C   2   6
 8:     2    D   4   6
 9:     3    A   6   9
10:     3    B   8   7
11:     3    C  10  11
12:     3    D   7   3

我尝试了多种使用 dcast 等的方法,但我无法转换数据。请帮忙!

【问题讨论】:

  • 一定要用data.table吗?您可以使用来自 dplyrspread 。 . .
  • @BenG 不需要 data.table。数据框对我来说也很好。不过我不知道该怎么做。

标签: r data.table reshape


【解决方案1】:

你必须 melt 数据框,然后 dcast -

tmp = melt(df, id = c("month", "student"), , variable.name = "cols")
df1 = dcast(tmp, month + cols ~ student, value.var = "value")

两者都来自data.table

【讨论】:

    【解决方案2】:

    tidyr 方法。

    > library(tidyr)
    > df %>%
        gather(cols, values,  A:D) %>% 
        spread(student, values)
       month cols Amy Bob
    1      1    A   9   8
    2      1    B   6   5
    3      1    C   1   5
    4      1    D  11   2
    5      2    A   7   6
    6      2    B   7   6
    7      2    C   2   6
    8      2    D   4   6
    9      3    A   6   9
    10     3    B   8   7
    11     3    C  10  11
    12     3    D   7   3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多