Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
r-根据三列的条件填充新列_R - Fatal编程技术网

r-根据三列的条件填充新列

r-根据三列的条件填充新列,r,R,我有下面的数据示例 df<-data.frame(ID=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3), CODE=c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B"), DA

我有下面的数据示例

df<-data.frame(ID=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3),           CODE=c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B"),
              DAT_NUM=c(20180101,20180101,20180105,20180107,20180107,20180108,20180203,20180203,20180201,20180205,
                        20180501,20180501,20180505,20180507,20180425,20180408,20180403,20180403,20180401,20180405,
                        20180105,20180105,20180105,20180107,20180107,20180110,20180206,20180203,20180201,20180205))
我需要一个新的列测试,它根据DAT_NUM ex.1-6分配一个连续的日值,但是序列必须根据ID和CODE列的唯一组合重置。测试栏中的第1天是指1A、1B、2B、2A等的第一天,不限制以DAT_NUM为单位的潜在天数长度

所需产出:

df1<-data.frame(ID=c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3), 
              CODE=c("A","A","A","A","A","A","B","B","B","B","B","B","B","B","B","A","A","A","A","A","A","A","A","A","B","B","B","B","B","B"),
              DAT_NUM=c(20180101,20180101,20180105,20180107,20180107,20180108,20180203,20180203,20180201,20180205,
                        20180501,20180501,20180505,20180507,20180425,20180408,20180403,20180403,20180401,20180405,
                        20180105,20180105,20180105,20180107,20180107,20180110,20180206,20180203,20180201,20180205),
              test=c(1,1,2,3,3,4,2,2,1,3,
                     2,2,3,4,1,4,2,2,1,3,
                     1,1,1,2,1,2,6,4,3,5))
我们可以在按“ID”和“CODE”分组后使用match

library(dplyr)
df %>% 
   group_by(ID, CODE) %>% 
   mutate(test = match(DAT_NUM, sort(unique(DAT_NUM))))
# A tibble: 30 x 4
# Groups:   ID, CODE [6]
#      ID CODE   DAT_NUM  test
#   <dbl> <fct>    <dbl> <int>
# 1     1 A     20180101     1
# 2     1 A     20180101     1
# 3     1 A     20180105     2
# 4     1 A     20180107     3
# 5     1 A     20180107     3
# 6     1 A     20180108     4
# 7     1 B     20180203     2
# 8     1 B     20180203     2
# 9     1 B     20180201     1
#10     1 B     20180205     3
# … with 20 more rows
我们可以在按“ID”和“CODE”分组后使用match

library(dplyr)
df %>% 
   group_by(ID, CODE) %>% 
   mutate(test = match(DAT_NUM, sort(unique(DAT_NUM))))
# A tibble: 30 x 4
# Groups:   ID, CODE [6]
#      ID CODE   DAT_NUM  test
#   <dbl> <fct>    <dbl> <int>
# 1     1 A     20180101     1
# 2     1 A     20180101     1
# 3     1 A     20180105     2
# 4     1 A     20180107     3
# 5     1 A     20180107     3
# 6     1 A     20180108     4
# 7     1 B     20180203     2
# 8     1 B     20180203     2
# 9     1 B     20180201     1
#10     1 B     20180205     3
# … with 20 more rows