如何根据 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
所以在类别下,有类别 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