gpt4 book ai didi

r - 创建一个从开始计数到当前值的列表

转载 作者:行者123 更新时间:2023-12-01 08:57:56 25 4
gpt4 key购买 nike

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

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 1/1/2004
A 2 1/3/2004
A 3 1/1/2004
A 3 1/3/2004
A 3 1/9/2004
B 4 1/7/2004
B 5 1/7/2004
B 5 1/10/2004
B 6 1/7/2004
B 6 1/10/2004
B 6 1/17/2004

日期从名称组的最小日期开始。

到目前为止,我做了这样的事情:

data$D = ave(data$Date, data$Name, FUN=min)
diff = data$Date - data$D
sequence(diff) + rep(data$D,diff)

但是,这只会产生一个重复,该重复也会计算其间的日期。有没有一种简单的方法可以从最短日期开始扩展?谢谢!

最佳答案

您似乎正在寻找 data.table 解决方案,所以这里是

library(data.table)
setDT(data)[, list(Person = rep(Person, seq_len(.N)),
Date = Date[sequence(seq_len(.N))]), by = Name]

# Name Person Date
# 1: A 1 1/1/2004
# 2: A 2 1/1/2004
# 3: A 2 1/3/2004
# 4: A 3 1/1/2004
# 5: A 3 1/3/2004
# 6: A 3 1/9/2004
# 7: B 4 1/7/2004
# 8: B 5 1/7/2004
# 9: B 5 1/10/2004
# 10: B 6 1/7/2004
# 11: B 6 1/10/2004
# 12: B 6 1/17/2004

编辑

这是用于此答案的数据集

data <- structure(list(Name = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), Person = 1:6, Date = structure(c(1L,
4L, 6L, 5L, 2L, 3L), .Label = c("1/1/2004", "1/10/2004", "1/17/2004",
"1/3/2004", "1/7/2004", "1/9/2004"), class = "factor")), .Names = c("Name",
"Person", "Date"), class = "data.frame", row.names = c(NA, -6L
))

关于r - 创建一个从开始计数到当前值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25281994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com