如何根据 2 个条件 R. 将 2 行的值加在一起?

How to add values from 2 rows together based on 2 conditions R.?

所以在类别下,有类别 c 和类别 c-ETS。 我想将两行的值加在一起,如果年份和月份相同,return 类别 c 下的值。

例如,对于 2014 年 1 月,则为 309 + 123 = 432。432

最后的结果应该是第二张图的东西。

应该在 r 上的结果如下

您还没有共享用于演示和检查代码的数据。然而,这应该有效。

df %>% group_by(Year, Month, category = ifelse(category %in% c("Category C", "Category C-ETS"), "Category C", category)) %>% summarise(number = sum(number))

解决此问题的一种方法是将“Category C-Ets”的单元格重命名为“Category C”,然后使用 grroup_by 并从 Dplyr 进行总结 这段代码解决了这个

library(dplyr)

df[df$category == "Category C-Ets", "category"] <-"Category C"

df <- df %>%
  group_by(year, month, category) %>%
  summarize(number = sum(number))

在下面逐步查看如何解决此问题

假设 df 是您的数据框,这就是我完成此任务的方式

#sample dataframe
df <- data.frame(year=c(2014,2014,2014,2014,2014,2014,2014,2014,2014,2014),
                 month = c(1,1,1,1,1,2,2,2,2,2),
                 category = c("Category C", "Category A", "Category C-Ets","CategoryB", "Category D", "Category C", "Category A", "Category C-Ets","CategoryB", "Category D"),
                 number = seq(100,1000,100))
print(df)

#this is how the row dataframe looks
 year month       category number
1  2014     1     Category C    100
2  2014     1     Category A    200
3  2014     1 Category C-Ets    300
4  2014     1      CategoryB    400
5  2014     1     Category D    500
6  2014     2     Category C    600
7  2014     2     Category A    700
8  2014     2 Category C-Ets    800
9  2014     2      CategoryB    900
10 2014     2     Category D   1000

然后用“C 类”替换“C 类”

df[df$category == "Category C-Ets", "category"] <-"Category C"

print(df) 
year month   category number
1  2014     1 Category C    100
2  2014     1 Category A    200
3  2014     1 Category C    300
4  2014     1  CategoryB    400
5  2014     1 Category D    500
6  2014     2 Category C    600
7  2014     2 Category A    700
8  2014     2 Category C    800
9  2014     2  CategoryB    900
10 2014     2 Category D   1000

现在您可以按年月和类别对它们进行分组并对数字求和

df <- df %>%
  group_by(year, month, category) %>%
  summarize(number = sum(number))

print(df)

   year month category   number
  <dbl> <dbl> <chr>       <dbl>
1  2014     1 Category A    200
2  2014     1 Category C    400
3  2014     1 Category D    500
4  2014     1 CategoryB     400
5  2014     2 Category A    700
6  2014     2 Category C   1400
7  2014     2 Category D   1000
8  2014     2 CategoryB     900