如何根据R中的group by向另一列添加单独的列值?

如何根据R中的group by向另一列添加单独的列值?,r,dataframe,dplyr,formattable,R,Dataframe,Dplyr,Formattable,我有一个名为“DF1”的数据表,如下所示(结构如下): 我想做的是将DF1中的“UNSUBSCRIBE”字段添加到我的转置过程中,以获得响应。Status包括每个月“UNSUBSCRIBE”的真实值总和,即使它是一个单独的列 我完全不知道如何做到这一点-我最终计划使用formattable并在其中添加颜色主题 预期产出: Response.Status `01/2020` `02/2020` `03/2020` `04/2020` `05/2020` `06/2020` `07

我有一个名为“DF1”的数据表,如下所示(结构如下):

我想做的是将DF1中的“UNSUBSCRIBE”字段添加到我的转置过程中,以获得响应。Status包括每个月“UNSUBSCRIBE”的真实值总和,即使它是一个单独的列

我完全不知道如何做到这一点-我最终计划使用formattable并在其中添加颜色主题

预期产出:

  Response.Status        `01/2020` `02/2020` `03/2020` `04/2020` `05/2020` `06/2020` `07/2020` `08/2020` `09/2019` `09/2020` `10/2019` `10/2020` `11/2019` `11/2020` `12/2019`
  <fct>                      <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>
1 EMAIL_OPENED                1090      3123      4087      5005      2098      1876      4278      3665       901      4162       883      2597      1187       690       883
2 NOT_RESPONDED               3205      9733     13177     15255      5470      4788     12708     10731      2835     15088      2846      8094      3665      1938      2667
3 PARTIALLY_SAVED                5        34        56         8        28        22        73        86        11        14         7        23         8         8         2
4 SUBMITTED                    216       557       838       828       357       310       654       621       214      1001       233       497       264       122       194
5 SURVEY_OPENED                164       395       597      1016       245       212       513       625       110       588       123       349       202        94       120
6 UNDELIVERED_OR_BOUNCED        92       280       318       260       109       127       319       321        63       445        69       192        93        39        74
7 UNSUBSCRIBE                  92       280       318       260       109       127       319       321        63       445        69       192        93        39        74
Response.Status`01/2020``02/2020``03/2020``04/2020``05/2020``06/2020``07/2020``08/2020``09/2019``09/2020``10/2019``10/2020``11/2019``11/2020``12/2019`
1封打开的电子邮件1090 3123 4087 5005 2098 1876 4278 3665 901 4162 883 2597 1187 690 883
2未答复3205 9733 13177 15255 5470 4788 12708 10731 2835 15088 2846 8094 3665 1938 2667
3部分储蓄5345682822273861114723882
4提交216 557 838 828 357 310 654 621 214 1001 233 497 264 122 194
5调查组开放164 395 597 1016 245 212 513 625 110 588 123 349 202 94 120
6未交付的或未交付的货物反弹92 280 318 260 109 127 319 321 63 445 69 192 93 39 74
7退订92 280 318 260 109 127 319 321 63 445 69 192 93 39 74

这就是你要找的吗

library(dplyr)
library(tidyr)

DF1 %>% 
  mutate(UNSUBSCRIBE = if_else(UNSUBSCRIBE == "TRUE", "UNSUBSCRIBE", NA_character_)) %>% 
  pivot_longer(c(Response.Status, UNSUBSCRIBE), values_to = "Response.Status") %>% 
  drop_na() %>% 
  count(Month, Year, Response.Status) %>% 
  pivot_wider(names_from = c("Month", "Year"), names_sep = "/", values_from = n)
输出

# A tibble: 4 x 2
  Response.Status `Nov/2020`
  <chr>                <int>
1 EMAIL_OPENED             2
2 NOT_RESPONDED            3
3 SURVEY_OPENED            1
4 UNSUBSCRIBE              3
#一个tible:4 x 2
答复.现状` 2020年11月`
已打开1封电子邮件2
2没有回答3
3调查1
4退订3

那么你想数什么呢?就我从您的例子中可以看出,
UNSUBSCRIBE
是一个仅包含NAs的因子列。该列中是否有任何非NA值可供计算?是的,也有真/假值-我希望每月@ekoambriliant计算真值!我用两个独立的输出做了一个rbind——这更干净了!非常感谢。
  Response.Status        `01/2020` `02/2020` `03/2020` `04/2020` `05/2020` `06/2020` `07/2020` `08/2020` `09/2019` `09/2020` `10/2019` `10/2020` `11/2019` `11/2020` `12/2019`
  <fct>                      <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>     <int>
1 EMAIL_OPENED                1090      3123      4087      5005      2098      1876      4278      3665       901      4162       883      2597      1187       690       883
2 NOT_RESPONDED               3205      9733     13177     15255      5470      4788     12708     10731      2835     15088      2846      8094      3665      1938      2667
3 PARTIALLY_SAVED                5        34        56         8        28        22        73        86        11        14         7        23         8         8         2
4 SUBMITTED                    216       557       838       828       357       310       654       621       214      1001       233       497       264       122       194
5 SURVEY_OPENED                164       395       597      1016       245       212       513       625       110       588       123       349       202        94       120
6 UNDELIVERED_OR_BOUNCED        92       280       318       260       109       127       319       321        63       445        69       192        93        39        74
7 UNSUBSCRIBE                  92       280       318       260       109       127       319       321        63       445        69       192        93        39        74
library(dplyr)
library(tidyr)

DF1 %>% 
  mutate(UNSUBSCRIBE = if_else(UNSUBSCRIBE == "TRUE", "UNSUBSCRIBE", NA_character_)) %>% 
  pivot_longer(c(Response.Status, UNSUBSCRIBE), values_to = "Response.Status") %>% 
  drop_na() %>% 
  count(Month, Year, Response.Status) %>% 
  pivot_wider(names_from = c("Month", "Year"), names_sep = "/", values_from = n)
# A tibble: 4 x 2
  Response.Status `Nov/2020`
  <chr>                <int>
1 EMAIL_OPENED             2
2 NOT_RESPONDED            3
3 SURVEY_OPENED            1
4 UNSUBSCRIBE              3