将类别变量传播到新的非布尔列中

时间:2018-08-16 22:24:37

标签: r pivot

示例数据如下:

 id   sy    OC
13693 2017  1
13752 2017  5
13693 2017  4
44555 2018  3

对于以下代码,我在做什么?

SORs.pivot(index='id',columns="sy",values='OC').add_prefix('sy').reset_index()

我以前从未见过R中使用过“枢轴”,但是一旦我克服了这一障碍,我就渴望学习。

我希望最终输出如下所示:

 id   sy2017  sy2018
13693 1       na
13752 5       na
13693 4       na
44555 na      3    

我改编自this Stack Overflow page

我还希望获取重复ID(13693)的单元格中值的总和。

更新

首先,请允许我为混合R和Python表示歉意。对我而言那真是愚蠢。

即使使用了某些解决方案,我仍然在数据方面遇到问题:

现在,这将产生一个包含200,000条记录的df-但是逻辑有效,并且我准备将列分散开。

我尝试了两种不同的方法,但是都没有用。

首先我尝试:

reshape(dat2, idvar="id", timevar="sy", direction="wide").

所有产生的结果是带有两列的df。第一个是subjectkey,第二个是DistinctOrderCound.2017:2018-后一列只是NA的一列。

然后我尝试:

spread(dat2, key = sy, value=value).

这会产生一个错误,指出行的重复值和重复项的示例列表。

我认为重塑应该可以正常工作。我不认为求和再有任何问题,因为我通过预查询解决了这一问题。

2 个答案:

答案 0 :(得分:0)

R软件包tidyr使用spread函数来完成此任务。就您而言,您可以尝试tidyr::spread(data, sy, OC)来完成您的目标。有关tidyr::spreadtidyr::gather的更多信息,请参见this blog post

答案 1 :(得分:0)

dcast()解决了所有问题。有点奇怪,多么简单。

谢谢大家!