当前位置: 首页 > 知识库问答 >
问题:

基于group_id和条件语句创建新索引

巢权
2023-03-14

我正在使用如下所示的数据框(让我们调用MyData)。我想做的是按PatientKey分组并创建一个名为NewID的新ID。每次对于同一个PatientKey,时间之间的测试是

PatientKey             TimeBetweenTests     NewId        
1                      0                    NewId should be 1 (first patient)
1                      0                    NewId should be 1
1                      1                    NewId should be 1                                                                
1                      2                    NewId should be 1
2                      3                    NewId should be 2 (new patient)                                                                          
3                      4                    NewId should be 3 (new patient)      
3                      16                   NewId should be 4 (same patient but TimeBetweenTests > 14)                                                                                              
3                      80                   NewId should be 5 (same patient but TimeBetweenTests > 14)
4                      3                    NewId should be 6 (new patient)
4                      0                    NewId should be 6 (new patient)                                                                            
4                      90                   NewId should be 7 (same patient but TimeBetweenTests > 14)        
4                      110                  NewId should be 8 (same patient but TimeBetweenTests > 14) 
5                      3                    NewId should be 9 (new patient)
5                      3                    NewId should be 9
5                      3                    NewId should be 9

etc    
                                                                       

我尝试过使用dplyr来实现这一点,但问题是,当我尝试类似于以下代码时,后续值没有改变:

对象

任何人都有方便的dplyr或数据。表格解决方案,或者循环方法

共有1个答案

谢英光
2023-03-14

试试这个

library(dplyr)
df %>% mutate(NewID = cumsum(lag(PatientKey, default = 0) != PatientKey | TimeBetweenTests > 14)

输出

   PatientKey TimeBetweenTests NewID
        <dbl>            <dbl> <int>
 1          1                0     1
 2          1                0     1
 3          1                1     1
 4          1                2     1
 5          2                3     2
 6          3                4     3
 7          3               16     4
 8          3               80     5
 9          4                3     6
10          4                0     6
11          4               90     7
12          4              110     8
13          5                3     9
14          5                3     9
15          5                3     9
 类似资料:
  • 我有一个这样的数据集 我想创建列(visit_no)。每当间隙大于1时,我们需要在接下来的行中将visit_no值增加1,直到我们找到另一个值,它将保持不变 这是数据框架

  • 通常都听到别人说,计算机很牛逼,很聪明,其实计算机一点都不聪明,光是你要跟他沟通,都会气 shi 你,聪明的是在写程序的你。 写程序就是跟计算机沟通,告诉它要做什么。 竟然是这样,那么肯定缺少不了一些沟通逻辑。比如你要告诉计算机在什么情况下做什么?或者在哪个时间点做什么? 这都需要用到逻辑判断。这一章节,主要就是说这个。 目录

  • 我试图为数据集创建多水平条形图。这些数据涉及跑步比赛的比赛时间。 Dataframe有以下列:名称、年龄组、完成时间、完成地点、家乡。下面是示例数据。 我想创建一个类似下图的条形图。每个年龄组将有一个条形图,最快的跑步者在图表的底部,跑步者的名字与城市和次数跑了比赛低于他们的名字。 我需要一个for循环还是一个简单的groupby工作?每个年龄组的数量和大小可以根据种族动态变化,因此它不是一个常数

  • if 是flash的常用语法之一,其格式如下 if(coditon) statement1 (else statement2) 其中,coditon可以是任何表达式,甚至不比是真正的布尔值,因为JavaScript会将其自动转化为布尔值。 如果条件执行结果为true,则执行statement1,如果条件为false,则执行结果statment2,(如果statement2存在,则else不是必须的

  • 跟其它程序设计语言一样,Bash中的条件语句让我们可以决定一个操作是否被执行。结果取决于一个包在[[ ]]里的表达式。 条件表达式可以包含&&和||运算符,分别对应 与 和 或 。除此之外还有很多有用的表达式。 共有两个不同的条件表达式:if和case。 基元和组合表达式 由[[ ]](sh中是[ ])包起来的表达式被称作 检测命令 或 基元。这些表达式帮助我们检测一个条件的结果。在下面的表里,为

  • 条件语句体应该总是被大括号包围。尽管有时候你可以不使用大括号(比如,条件语句体只有一行内容),但是这样做会带来问题隐患。比如,增加一行代码时,你可能会误以为它是 if 语句体里面的。此外,更危险的是,如果把 if 后面的那行代码注释掉,之后的一行代码会成为 if 语句里的代码。 推荐: if (!error) { return success; } 不推荐: if (!error)