首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据使用datatable的条件逐组添加新行?

根据使用datatable的条件逐组添加新行?
EN

Stack Overflow用户
提问于 2020-11-29 21:15:06
回答 1查看 65关注 0票数 1

这是我当前的datatable:

代码语言:javascript
复制
ID  Stage Month 
200 A    2020-11   
200 B    2020-11  
200 C    2020-11   
201 A    2020-11   
201 B   2020-11  
... 

只有当阶段A、B和C存在时,我才试图向每个ID/月份组添加一行。

这将是我想要的输出:

代码语言:javascript
复制
ID  Stage Month 
200 A    2020-11   
200 B    2020-11  
200 C    2020-11 
200 All  2020-11  
201 A    2020-11   
201 B   2020-11 
...  

我是数据表和R的新手,所以任何的指导都将不胜感激!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-29 21:16:37

我们可以按“ID”、“月份”进行分组,检查if all 'A','B','C‘找到'Stage',然后将'Stage’与'All‘(c(Stage, 'All))连接起来,或者else返回'Stage’

代码语言:javascript
复制
library(data.table)
setDT(df1)[, .(Stage = if(all(c('A', 'B', 'C') %in% Stage)) c(Stage, 'All') 
              else Stage),  by = .(ID, Month)][, names(df1), with = FALSE]

-output

代码语言:javascript
复制
#    ID Stage   Month
#1: 200     A 2020-11
#2: 200     B 2020-11
#3: 200     C 2020-11
#4: 200   All 2020-11
#5: 201     A 2020-11
#6: 201     B 2020-11

或者在tidyverse中使用类似的逻辑

代码语言:javascript
复制
library(dplyr)
df1 %>% 
    group_by(ID, Month) %>% 
    summarise(Stage = if(all(c('A', 'B', 'C') %in% Stage)) c(Stage, 'All') 
           else Stage, .groups = 'drop') %>% 
    select(names(df1))
# A tibble: 6 x 3
#     ID Stage Month  
#  <int> <chr> <chr>  
#1   200 A     2020-11
#2   200 B     2020-11
#3   200 C     2020-11
#4   200 All   2020-11
#5   201 A     2020-11
#6   201 B     2020-11

数据

代码语言:javascript
复制
df1 <- structure(list(ID = c(200L, 200L, 200L, 201L, 201L), Stage = c("A", 
"B", "C", "A", "B"), Month = c("2020-11", "2020-11", "2020-11", 
"2020-11", "2020-11")), class = "data.frame", row.names = c(NA, 
-5L))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65065255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档