我是数据科学的新手,我正在开发一个类似于下面显示的示例数据的模型。但是,在原始数据中,有许多id_num
和Events
。我的目标是根据之前的id_num
预测每个Events
的后续3个事件。
请帮我解决这个问题或者使用R编程来解决这个问题的方法。
答案 0 :(得分:0)
最简单的“预测”是假设每个id_num
的字母序列都会重复。我希望这符合OP对“预测”理解的内容。
代码
library(data.table)
DT[, .(Events = append(Events, head(rep(Events, 3L), 3L))), by = id_num]
创建
这里使用了id_num Events 1: 1 A 2: 1 B 3: 1 C 4: 1 D 5: 1 E 6: 1 A 7: 1 B 8: 1 C 9: 2 B 10: 2 E 11: 2 B 12: 2 E 13: 2 B 14: 3 E 15: 3 A 16: 3 E 17: 3 A 18: 3 E 19: 3 A 20: 3 E 21: 4 C 22: 4 C 23: 4 C 24: 4 C 25: 5 F 26: 5 G 27: 5 F 28: 5 G 29: 5 F id_num Events
data.table
,因为它易于使用分组功能,因为我熟悉它。
对于每个id_num
,使用rep()
将现有的字母序列复制3次,以确保足够的值来填充至少3个下一个值。但是,只使用head()
获取前3个值。这三个值将附加到每个id_num
有两种可能的优化:
n_pred
的值的数量长得多,那么简单地重复长序列n_pred
次就是一种浪费。append()
的调用。因此,优化的代码如下所示:
n_pred <- 3L
DT[, .(Events = head(rep(Events, 1L + ceiling(n_pred / .N)), .N + n_pred)), by = id_num]
请注意,.N
是data.table
语法中的特殊符号,包含组中的行数。 head()
现在返回原始序列加上预测值。
DT <- data.table(
id_num = c(rep(1L, 5L), 2L, 2L, rep(3L, 4L), 4L, 5L, 5L),
Events = c(LETTERS[1:5], "B", "E", rep(c("E", "A"), 2L), "C", "F", "G")
)
DT
id_num Events 1: 1 A 2: 1 B 3: 1 C 4: 1 D 5: 1 E 6: 2 B 7: 2 E 8: 3 E 9: 3 A 10: 3 E 11: 3 A 12: 4 C 13: 5 F 14: 5 G