首页 > 解决方案 > r 如何将函数应用于数据表

问题描述

我有一个名为的数据表e.table,其中包含一个名为的列Entity和另一个名为的列Equity。该列中的一行 Entity名为total count,它对Equity其他行的所有值求和。我写了这行来做这个计算:

e.table[e.table$Entity != "Total count", sum(e.table$Equity)]

如果我打印它,它会给我我想要的,但如果我这样做:

e.table <- e.table[e.table$Entity != "Total count", sum(e.table$Equity)]

或这个:

e.table[, Equity :=vapply(Equity, e.talbe[e.table$Entity != "Total count", sum(e.table$Equity)]]

我没有得到Total count.

我真正想要的是问我如何将这行代码应用到表中,以便用这个新的总计数值更新表。

标签: r

解决方案


从您说“数据表”并使用运算符这一事实来看:=,我了解您正在使用 package data.table

假设您的数据如下所示:

library(data.table)
e.table <- data.table(Entity=c("a", "b", "c", "Total count"), Equity=c(1, 3, 6, 10))
e.table
#         Entity Equity
# 1:           a      1
# 2:           b      3
# 3:           c      6
# 4: Total count     10

并且我们还假设在某个时候来自外部世界的某个人添加了一行而不更新总数,它变成了这样:

e.table <- data.table(Entity=c("a", "b", "c", "d", "Total count"), Equity=c(1, 3, 6, 10, 10))
e.table
#         Entity Equity
# 1:           a      1
# 2:           b      3
# 3:           c      6
# 4:           d     10
# 5: Total count     10

并且您正在寻找更新此Total count值的方法。

这应该可以解决问题:

e.table[Entity=="Total count", Equity := e.table[Entity!="Total count", sum(Equity)]]
e.table
#         Entity Equity
# 1:           a      1
# 2:           b      3
# 3:           c      6
# 4:           d     10
# 5: Total count     20

推荐阅读