r - 在数据框中创建一个作为总和、按类别或不同变量的新列。(我曾经在 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,而不是作为命名列)
解决方案
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
推荐阅读
- python - 在没有 Chrome GUI 的情况下抓取 JS 呈现的站点?
- android - 谷歌适合空数据集
- list - 在 Haskell 中实现哥德巴赫猜想,有很多限制
- python - UnpicklingError: 无效的加载键,'\x1f'
- java - 可以说“方法重载”,其中两个没有关系(扩展)的差异类具有相同的方法名称但不同类型的参数?
- arrays - Constraints in Julia
- networking - 如何让 Kubernetes 集群 (GKE) 中的 Pod 使用节点的 IP 地址与集群外的虚拟机通信
- java - 枚举和加号一起在DTD文件中?
- pandas - 如何在熊猫数据框中转发填充 NaN 值?
- javascript - 解析预定的后台作业