如何根据R中的group by向另一列添加单独的列值?
我有一个名为“DF1”的数据表,如下所示(结构如下): 我想做的是将DF1中的“UNSUBSCRIBE”字段添加到我的转置过程中,以获得响应。Status包括每个月“UNSUBSCRIBE”的真实值总和,即使它是一个单独的列 我完全不知道如何做到这一点-我最终计划使用formattable并在其中添加颜色主题 预期产出:如何根据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
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