r如何将功能应用于数据表

时间:2019-11-21 13:58:19

标签: 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的更新值。

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

2 个答案:

答案 0 :(得分:1)

您需要将其存储在变量中,而不是整个表中。尝试这样做:

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

答案 1 :(得分:1)

根据您说“数据表”并使用运算符:=的事实,我了解到您正在使用软件包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