r-如何在不使用循环的情况下进行迭代计算



我有一个"大";我需要做如下计算的数据帧:

data <- data.frame( "name"=c( "Tom", "Peter", "Peter", "Peter", "Tom", "Peter" ), "goal"=c(1,-2,2,3,-1,0), "total"=0 )
for( i in 1:nrow(data) ) {
count <- 0
for ( j in 1:i) {
if (data$name[j] == data$name[i]) {
count <- count + data$goal[j]
}
}
data$total[i] <- count
}
> data
name goal total
1   Tom    1     1
2 Peter   -2    -2
3  John    2     2
4 Peter    3     1
5   Tom   -1     0
6 Peter    0     1

我需要执行";合计";列中添加之前的进球数。

我的数据库目前有83000行,计算时间很长。我想在没有";对于";环你有主意吗?

我看到了下面的帖子,但我不知道如何调整它。

提前感谢

如果您想避免for循环,请尝试找到可以执行所需操作的矢量化函数。(或处理数据帧或其他多维对象的函数(。对于您的示例,您可以使用group_bydplyr根据name分离数据帧,然后使用矢量化函数cumsum(累积和(:

library(dplyr)
data <- data %>% group_by(name) %>% mutate(total = cumsum(goal))

输出

> data
# A tibble: 6 x 3
# Groups:   name [2]
name   goal total
<chr> <dbl> <dbl>
1 Tom       1     1
2 Peter    -2    -2
3 Peter     2     0
4 Peter     3     3
5 Tom      -1     0
6 Peter     0     3

我在你的文章中使用了你的数据帧初始化,这就是为什么我得到了与你不同的输出。

如果要在操作后删除分组,请使用ungroup

相关内容

最新更新