Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.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 为具有重复和缺失观察的每个组生成id_R_Datatable_Dplyr_Grouping_Panel - Fatal编程技术网

R 为具有重复和缺失观察的每个组生成id

R 为具有重复和缺失观察的每个组生成id,r,datatable,dplyr,grouping,panel,R,Datatable,Dplyr,Grouping,Panel,我有一个数据集,上面有几个星期观察到的个人。有些人在几周内没有观察到,有些人在同一周内有几次观察到。我需要创建一个每周ID(代码中的ID_week),该ID是针对个人的。如果一个人在一周内有两次或两次以上的观察,两次观察的id_周应相同。如果一个人在给定的一周内没有观察到,那么下一周的观察应该是从最后一个观察点开始的。这将产生以下数据: dt<-data.frame(individ=c(1,1,1,2,2,2,3,3,3,3),week=c(1,2,2,1,2,4,1,3,4,4),id_

我有一个数据集,上面有几个星期观察到的个人。有些人在几周内没有观察到,有些人在同一周内有几次观察到。我需要创建一个每周ID(代码中的ID_week),该ID是针对个人的。如果一个人在一周内有两次或两次以上的观察,两次观察的id_周应相同。如果一个人在给定的一周内没有观察到,那么下一周的观察应该是从最后一个观察点开始的。这将产生以下数据:

dt<-data.frame(individ=c(1,1,1,2,2,2,3,3,3,3),week=c(1,2,2,1,2,4,1,3,4,4),id_week=c(1,2,2,1,2,3,1,2,3,3))

使用
数据的选项。表

setDT(dt)[, id_week := rleid(week), individ]

使用
数据的选项。表

setDT(dt)[, id_week := rleid(week), individ]

以下是几个备选方案:

1) 使用密集排列:

library(dplyr)
dt %>% group_by(individ) %>% mutate(id_week = dense_rank(week))
dt$id_week <- with(dt, ave(week, individ, FUN = function(x) match(x, unique(x))))
library(data.table)
setDT(dt)[, id_week := as.integer(factor(week)), individ]
2) 使用
匹配
唯一

library(dplyr)
dt %>% group_by(individ) %>% mutate(id_week = dense_rank(week))
dt$id_week <- with(dt, ave(week, individ, FUN = function(x) match(x, unique(x))))
library(data.table)
setDT(dt)[, id_week := as.integer(factor(week)), individ]

以下是几个备选方案:

1) 使用密集排列:

library(dplyr)
dt %>% group_by(individ) %>% mutate(id_week = dense_rank(week))
dt$id_week <- with(dt, ave(week, individ, FUN = function(x) match(x, unique(x))))
library(data.table)
setDT(dt)[, id_week := as.integer(factor(week)), individ]
2) 使用
匹配
唯一

library(dplyr)
dt %>% group_by(individ) %>% mutate(id_week = dense_rank(week))
dt$id_week <- with(dt, ave(week, individ, FUN = function(x) match(x, unique(x))))
library(data.table)
setDT(dt)[, id_week := as.integer(factor(week)), individ]

谢谢,这虽然没有给我个人的具体身份证周。抱歉错过了by谢谢,这虽然没有给我个人的具体身份证周。抱歉错过了by