Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.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_Date_Add_Rows - Fatal编程技术网

根据r中的一个日期生成日期列表

根据r中的一个日期生成日期列表,r,date,add,rows,R,Date,Add,Rows,我是R新手,我发现很难生成一系列行,其中每个生成的行都有一个计算日期 例如,从如下数据集开始: Name date_birth Greg 01/02/2015 Fred 02/02/2015 …以生成以下内容: Name date_birth age date_atage<br/> Greg 01/02/2015 0 01/02/2015 Greg 01/02/2015 1 02/02/2015 Greg 01/02/2015 2 03/0

我是R新手,我发现很难生成一系列行,其中每个生成的行都有一个计算日期

例如,从如下数据集开始:

Name  date_birth
Greg  01/02/2015
Fred  02/02/2015
…以生成以下内容:

Name date_birth age date_atage<br/>
Greg 01/02/2015   0     01/02/2015
Greg 01/02/2015   1     02/02/2015
Greg 01/02/2015   2     03/02/2015
Fred 02/02/2015   0     02/02/2015
Fred 02/02/2015   1     03/02/2015
Fred 02/02/2015   2     04/02/2015
姓名日期\出生年龄日期\日期
格雷格2015年2月1日0 2015年2月1日 Greg 01/02/2015 1 02/02/2015 Greg 01/02/2015 2 03/02/2015 弗雷德2015年2月2日0 2015年2月2日 Fred 2015年2月2日1 2015年2月3日 Fred 2015年2月2日2004年2月2日

我一直在研究像R-blogger、general Instruction blogs和本网站这样的网站,我一直在尝试找出一个包含Seq语句的循环语句,这样每个人(例如Greg、Fred等)都可以重复这个过程,计算日期并将其放在自己的行中。您的第一个想法可能是,在Excel中执行此操作更简单,但事实并非如此,因为我需要对800多人(即不仅仅是Greg和Fred)以及300天大的儿童重复此操作。

我们可以使用
数据。table

 library(data.table)
 setDT(df1)[, .(date_birth, date_at_age = format(seq(as.Date(date_birth, 
      "%d/%m/%Y"), length.out=3, by = "1 day"), "%d/%m/%Y")) ,
           by = Name][,age := seq_len(.N)-1 , by = Name][]
#   Name date_birth date_at_age age
#1: Greg 01/02/2015  01/02/2015   0
#2: Greg 01/02/2015  02/02/2015   1
#3: Greg 01/02/2015  03/02/2015   2
#4: Fred 02/02/2015  02/02/2015   0
#5: Fred 02/02/2015  03/02/2015   1
#6: Fred 02/02/2015  04/02/2015   2

这是获得data.table将带您到达的相同位置的一种很长的方式

看看你是如何在R中使用日期的。我采用了你原来的格式,并将其转换为日期(代码行2)。有关更多代码,请参阅

设置一些虚拟数据:

df = data.frame(name=c("Gregg", "Joan"), DOB=c("01/02/2015", "02/02/2015"), stringsAsFactors=F)
制作日期格式:

df$DOB = as.Date(df$DOB, format="%d/%m/%Y")
循环每个名称,创建301个实例,并将日期添加到DoB

df = lapply(1:nrow(df), function(i){
   x = data.frame(name=rep(df[i, 1], times=301),
                  DoB=rep(df[i, 2], times=301),
                  age=0:300)
   x$newDate = x$DoB + x$age
   x
})
将列表转换为数据帧:

df = do.call("rbind.data.frame", df)
检查输出:

head(df)
设置


df你的年龄是从哪里来的,还是只是增加了一天?是的,只是增加了一天。但我希望生成的列表从1天到300天。基本上每个人可以生成300个新行。也可以看到这个解决方案:我成功地完成了上面的工作。我还试图计算怀孕年龄(以及相关日期)。假设怀孕在出生前290天开始,怀孕年龄(天)=290+(怀孕日期-出生日期)。我使用下面的代码来计算怀孕年龄,但结果是负值。有没有办法让他们积极起来?库(data.table)setDT(df)[,(出生日期,怀孕日期=format(seq)(as.date(出生日期,“%d/%m/%Y”),length.out=291,by=“-1天”),“%d/%m/%Y”)),by=name][,怀孕年龄:=seq\u len(.N)-291,by=name][]
df <- cbind(c("Greg","Fred"),c("01/02/2015","02/02/2015"))
max_age <- 2
start_at <- 0
new_df <- data.frame(rep(NA,(max_age+1)*dim(df)[1])) 
new_df[,1] <- rep(df[,1],each=max_age-start_at+1) #Names
new_df[,2] <- rep(df[,2],each=max_age-start_at+1) #Birth date
new_df[,3] <- rep(seq(from=start_at,to=max_age),dim(df)[1]) #Age
library(lubridate)
new_df[,4] <- dmy(new_df[,2]) + days(new_df[,3]) #Date at age
colnames(new_df) <- c("names","date_birth","age","date_at_age")