基于因子列转置数据框

Transposing data frame based on factor column

假设我有一个从 .csv 文件获得的以下格式的数据框:

Measurement    Config  Value
---------------------------    _
Time           A       10       |      
Object         A       20       | Run 1    
Nodes          A       30      _|     
Time           A       8        |     
Object         A       18       | Run 2
Nodes          A       29      _|
Time           B       9        |
Object         B       20       | Run 3
Nodes          B       35      _|
...

在每个 运行 期间有固定数量的 Measurements,每个 运行 是 运行 与给定的 Config。 每个 运行 的 Measurements 是固定的(例如,每个 运行 由上面示例中的时间、对象和节点测量组成),但可以有多个 运行 s 用于单个配置(例如,Config A 在上面的示例中是 运行 两次,B 只有一次)

我的主要目标是绘制其中两种测量类型之间的相关性(散点图),例如,绘制 Objects(x 轴)对 Nodes(y 轴)并突出显示不同Configs(颜色)

我认为如果数据框采用以下格式,则可以最好地实现这一点:

Config  Time  Objects  Nodes
--------------------------
A       10    20       30         <- Run 1
A       8     18       29         <- Run 2
B       9     20       35         <- Run 3

即,根据 Measurement 列的因子值创建列,并将相应的 Value 值分配给单元格。

R 中有 "easy" 方法来实现吗?

首先创建一个run变量:

# option 1:
d$run <- ceiling(seq_along(d$Measurement)/3)

# option 2:
d$run <- 1 + (seq_along(d$Config)-1) %/% 3

然后使用 reshape2data.table:

中的 dcast 函数重塑为宽幅面
reshape2::dcast(d, Config + run ~ Measurement, value.var = 'Value')

你将得到:

  Config run Nodes Object Time
1      A   1    30     20   10
2      A   2    29     18    8
3      B   3    35     20    9