首页 > 解决方案 > 在数据框中创建一个作为总和、按类别或不同变量的新列。(我曾经在 STATA 中使用 bysort egen total 执行此操作)

问题描述

对 R 来说非常新。我需要为数据表 SUM_COUNT_STATE 创建新列,它是按状态列出的 COUNT 列的总和。这可以在 STATA 中使用 bysort STATE:egen SUM_COUNT_STATE = total(COUNT)或在 Excel 中使用sumif().

STATE   COUNT   SUM_COUNT_STATE
FL  70.88   210.42
RI  99.76   222.75
TX  34.55   160.89
CA  99.31   380.39
PA  80.12   175.22
PA  95.1    175.22
RI  13.72   222.75
FL  88.64   210.42
RI  79.31   222.75
CA  62.49   380.39
TX  26.89   160.89
FL  50.9    210.42
TX  4.33    160.89
TX  95.12   160.89
CA  82.8    380.39
CA  48.57   380.39
CA  87.22   380.39
RI  29.96   222.75

我试过了:

DATAFRAME <- group_by(DATAFRAME, STATE)
DATAFRAME$SUM_COUNT_STATE <- sum(DATAFRAME$COUNT)

这只是为整个列提供一个总和,而不是按状态。

DATAFRAME <- data.frame(rowsum(DATAFRAME$COUNT,DATAFRAME$STATE))

这也为整个列提供了一个总和,而不是按状态。

SUM_COUNT_STATE <- rowsum(DATAFRAME$COUNT,DATAFRAME$STATE)

这似乎给出了正确的计算,但每个状态只留下一行,但输出是一个矩阵,我似乎无法重新附加到原始数据帧。

(在我的实际数据中,我使用的是 ZIP_CODE 而不是状态)并且生成的矩阵似乎使用 ZIP_CODE 作为 _N,而不是作为命名列)

标签: r

解决方案


tmp <- tapply(DATAFRAME$COUNT, DATAFRAME$STATE, sum) #Obtains sums by state
DATAFRAME$SUM_COUNT_STATE <- tmp[DATAFRAME$STATE] # adds a new column using DATAFRAME$STATE
#as index to subset the vector with the sums by the namees of its elements


推荐阅读