首页 > 解决方案 > 如何将输入和输出表转换为矩阵?

问题描述

我正在尝试将当前列为 data.table 中的列的输入和输出表(就像介绍函数的初中/高中代数教科书一样,请参见下面的示例)转换为输入为行和列标签以及输出的矩阵作为矩阵条目。

> dt <- data.table(x = c("a","b","c"), y = c("T1", "T2", "T2"), z = c(10:12))
> dt
   x  y  z
1: a T1 10
2: b T2 11
3: c T2 12
> dt2 <- data.table(x = c("a","b","c"), T1 = c(10,0,0), T2 = c(0,11,12))
> dt2
   x T1 T2
1: a 10  0
2: b  0 11
3: c  0 12

我在生成时的第一个想法dt2是创建它但用 0 填充,然后创建一个函数 f(x,y) 以将与 dt 中的每个 (x,y) 关联的“z”带到其对应位置 (x,y) , 在dt2, 即:

> dt2attempt <- data.table(x = c("a","b","c"), T1 = c(0,0,0), T2 = c(0,0,0))
> dt2attempt
   x T1 T2
1: a  0  0
2: b  0  0
3: c  0  0

我坚持创建函数 f(x,y) 以关联dtdt2attempt,从而生成dt2。有更好的方法吗?提供的任何建议或功能将不胜感激。

标签: rdata.table

解决方案


dt2可以生成dcast

> dcast(dt, x ~ y, value.var = 'z', fill = 0)
   x T1 T2
1: a 10  0
2: b  0 11
3: c  0 12

推荐阅读