按ID传播数据表

时间:2018-07-25 15:39:00

标签: r data.table reshape

我有以下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等尝试了多种方法,但是无法转换数据。请帮助!

2 个答案:

答案 0 :(得分:2)

您必须先require("./inputmask.dependencyLib.jquery") or require(["General/UseDatatables"], function (UseDatatables) { // you can access UseDatatables module here }); 数据框,然后再melt-

dcast

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

答案 1 :(得分:1)

一种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