创建NA';在R中的data.frame或data.table类结构中的展开日期之间。

创建NA';在R中的data.frame或data.table类结构中的展开日期之间。,r,dataframe,data.table,R,Dataframe,Data.table,我目前有一个如下所示的数据表: > data Name Person Date A 1 1/1/2004 A 2 1/3/2004 A 3 1/9/2004 B 4 1/7/2004 B 5 1/10/2004 B 6 1/17/2004 我正在尝试创建类似以下内容的内容: Na

我目前有一个如下所示的数据表:

> data
Name     Person     Date
A        1          1/1/2004
A        2          1/3/2004
A        3          1/9/2004 
B        4          1/7/2004
B        5          1/10/2004 
B        6          1/17/2004
我正在尝试创建类似以下内容的内容:

Name     Person     Date
A        1          1/1/2004
A        2          Repeat
A        2          1/3/2004
A        3          Repeat
A        3          Repeat
A        3          1/9/2004
B        4          1/7/2004
B        5          Repeat
B        5          1/10/2004
B        6          Repeat
B        6          Repeat
B        6          1/17/2004
这样做的目的是,只要日期已经在名称列上重复,就在名称列上放置一个因子变量,甚至是“NA”或空格

这看起来非常简单,但我能想到的唯一实现是使用if-else语句执行for循环。当它完成任务时,方法论在更高的维度上崩溃了。我的代码如下所示:

for(i in nrow(data)){

if data$Date[i] == data$Date[i+1] & data$Name[i] == data$Name[i+1]
then as.vector(data[i,]) <- data$Date[i+1]

}
for(i in nrow(数据)){
如果数据$Date[i]==数据$Date[i+1]&数据$Name[i]==数据$Name[i+1]
然后作为.vector(data[i,])您可以尝试:

res <- do.call(rbind,lapply(split(data, data$Name),
 function(x) {
 Date1 <- as.Date(x$Date, "%m/%d/%Y")
 x <- x[order(Date1),]
 indx <- seq_len(nrow(x))
 cbind(x[rep(indx,indx), 1:2], Date=x[sequence(indx),3])}))

 row.names(res) <- 1:nrow(res)

  res$Date <- as.character(res$Date)
  res$Date[duplicated(res$Date)] <- "Repeat"
   res
  #   Name Person      Date
  #1     A      1  1/1/2004
  #2     A      2    Repeat
  #3     A      2  1/3/2004
  #4     A      3    Repeat
  #5     A      3    Repeat
  #6     A      3  1/9/2004
  #7     B      4  1/7/2004
  #8     B      5    Repeat
  #9     B      5 1/10/2004
  #10    B      6    Repeat
  #11    B      6    Repeat
  #12    B      6 1/17/2004

你刚才是不是采纳了我以前的答案并改进了它?:)@David Arenburg。是的,我偷了你以前的答案。我应该提到它:)-没关系,我从你那里偷了很多:)特别是正则表达式。谢谢你的帖子!对于我的编码,我的日期并不都是唯一的,这意味着,例如,2014年1月8日可能会出现三次。那么上面的代码是什么自从2014年1月8日第二次发布以来,到处都有重复,代码认为它又出现了。有没有办法允许重复的日期,并且仍然让它像那样扩展?谢谢大家!你能用重复的日期和预期的结果更新你的帖子吗?我对重复的预期结果有些困惑。
   DT1 <- setDT(data)[, list(Person=rep(Person, seq_len(.N)), 
           Date=Date[sequence(seq_len(.N))]), by= Name][duplicated(Date), Date:= "Repeat"]
  DT1
  #   Name Person      Date
  #1:    A      1  1/1/2004
  #2:    A      2    Repeat
  #3:    A      2  1/3/2004
  #4:    A      3    Repeat
  #5:    A      3    Repeat
  #6:    A      3  1/9/2004
  #7:    B      4  1/7/2004
  #8:    B      5    Repeat
  #9:    B      5 1/10/2004
 #10:    B      6    Repeat
 #11:    B      6    Repeat
 #12:    B      6 1/17/2004