根据R中另一列中的条件对列求和

Sum column based on condition in another columns in R

我必须根据 if 语句对列的值求和。 这是我的代码:

a <- c(1,2,3)
b <- c(2,2,3)
f <- c(1,2,3)
df <- data.frame(a,b,f)
df
for (i in 1:nrow(df)){
  if (df$a[i] == df$b[i]){
    w <- sum(df$f)
  }
}

我的结果是6,应该是5,f[2]=2 + f[3]=3之和。

感谢您的帮助

我们不需要循环

with(df, sum(f[a == b]))
#[1] 5

或者为了更快的子集和求和,可以使用collapse

library(collapse)
fsum(fsubset(df, a == b)$f)
#[1] 5

在循环中,可以改为

w <- 0
for(i in seq_len(nrow(df))) {
    if(df$a[i] == df$b[i]) {
        w <- w + df$f[i]
   }
 }

w
#[1] 5

data.table方法:

a <- c(1,2,3)
b <- c(2,2,3)
f <- c(1,2,3)
df <- data.frame(a,b,f)

library(data.table)

setDT(df)

df[,.(f_sum = sum(f[a==b]))][]

# Returns a data.table object:

#>    f_sum
#> 1:     5

# OR 

df[,(f = sum(f[a==b]))][]

# Returns a vector:

#> [1] 5

reprex package (v0.3.0) 于 2021 年 3 月 16 日创建 **或