创建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