根据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 日创建
**或
我必须根据 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 日创建 **或