繁体   English   中英

如何根据 2 个条件 R 将 2 行中的值相加?

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

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

例如,对于 2014 年一月,它将是 309 + 123 = 432. 432图 1

最终结果应该是第二张图片中的内容。图 2

应该在 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 是你的 dataframe

#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类-Ets”

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM