Home > database >  Sum with 2 different condition
Sum with 2 different condition

Time:05-04

I have always use VBA for doing this operation but my commit prefer R. I need to sum column (c) if a and b has the same value. It is possible do it in R? the firt dataframe is my original, the second is my result. I can use group also if I use two condition? Important: name a and b sometimes can be the same.

a <- c("a1", "a1","a2","a2","a2","a2","a2","a2","a3")
b <- c("b1", "b1","b1","b2","b2","b3","b3","b4","b4")
c <- as.numeric(c("1500", "5000","3000","4600","4500","1000", "5000","8000","4000"))
df <- data.frame(a, b, c)

a1 <- c("a1","a2","a2","a2","a2","a3")
b1 <- c("b1","b1","b2","b3","b4","b4")
c1 <- as.numeric(c("6500","3000","9100","6000","8000","4000"))

result <- data.frame(a1, b1, c1)

CodePudding user response:

Using dplyr:

library(dplyr)

a <- c("a1", "a1","a2","a2","a2","a2","a2","a2","a3")
b <- c("b1", "b1","b1","b2","b2","b3","b3","b4","b4")
d <- as.numeric(c("1500", "5000","3000","4600","4500","1000", "5000","8000","4000"))
my_dataframe <- data.frame(a, b, d)

my_dataframe %>% 
  group_by(a,b) %>% 
  summarise(d = sum(d)) %>% 
  ungroup()

Result:

# A tibble: 6 × 3
  a     b         d
  <chr> <chr> <dbl>
1 a1    b1     6500
2 a2    b1     3000
3 a2    b2     9100
4 a2    b3     6000
5 a2    b4     8000
6 a3    b4     4000

CodePudding user response:

In base R, use aggregate:

aggregate(c ~ a   b, df, sum)

#   a1 b1   c1
# 1 a1 b1 6500
# 2 a2 b1 3000
# 3 a2 b2 9100
# 4 a2 b3 6000
# 5 a2 b4 8000
# 6 a3 b4 4000

CodePudding user response:

A data.table option:

library(data.table)
as.data.table(df)[, sum(c), by = .(a, b)]

Output:

    a  b   V1
1: a1 b1 6500
2: a2 b1 3000
3: a2 b2 9100
4: a2 b3 6000
5: a2 b4 8000
6: a3 b4 4000
  •  Tags:  
  • r sum
  • Related