首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R中事件分析序列的数据结构

R中事件分析序列的数据结构
EN

Stack Overflow用户
提问于 2016-05-12 22:05:11
回答 2查看 306关注 0票数 1

下面的代码创建了一个示例dataframe来说明我的问题。我有一个时间标记的事件清单。

代码语言:javascript
复制
set.seed(100)
mydf<-data.frame(time=(1:1000),event = sample(1:10,10000,replace=TRUE))

mydf
time event
1      6
2      5
3      7
4      8
5      4
6      2
7     10
8      9
9      4
10     6
11     4
12     3
13     8
14     3
15     9
16     1
17     7
18     3
19     8
20     10

我正在尝试创建一个新变量,该变量将在指定的窗口中列出前面的事件。假设窗口大小为10,我想在下面创建数据。我的最终目标是为事件序列分析准备我的数据。

代码语言:javascript
复制
time event eventList
1      6       NA
2      5       NA
3      7       NA
4      8       NA
5      4       NA
6      2       NA
7     10       NA
8      9       NA
9      4       NA
10     6       NA
11     4       {6,5,7,8,4,2,10,9,4,6}
12     3       {5,7,8,4,2,10,9,4,6,4}
13     8       {7,8,4,2,10,9,4,6,4,3}
14     3       {8,4,2,10,9,4,6,4,3,8}
15     9       {4,2,10,9,4,6,4,3,8,3}
16     1       {2,10,9,4,6,4,3,8,3,9}
17     7       {10,9,4,6,4,3,8,3,9,1}
18     3       {9,4,6,4,3,8,3,9,1,7}
19     8       {4,6,4,3,8,3,9,1,7,8}
20     10      {6,4,3,8,3,9,1,7,8,10}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-12 22:47:49

最后三行不匹配,请检查预期的输出。

代码语言:javascript
复制
mydf=read.table(text="
time event
1      6
2      5
3      7
4      8
5      4
6      2
7     10
8      9
9      4
10     6
11     4
12     3
13     8
14     3
15     9
16     1
17     7
18     3
19     8
20     10",header=TRUE,stringsAsFactors=FALSE)


windowSize = 10
mydf$eventList = do.call(rbind,lapply(mydf$time,function(x) {
ifelse(x<windowSize,NA,paste0("{", paste0(mydf[ tail(1:x,windowSize) ,"event"],collapse=",") , "}"))

}))

mydf
#   time event              eventList
#1     1     6                   <NA>
#2     2     5                   <NA>
#3     3     7                   <NA>
#4     4     8                   <NA>
#5     5     4                   <NA>
#6     6     2                   <NA>
#7     7    10                   <NA>
#8     8     9                   <NA>
#9     9     4                   <NA>
#10   10     6 {6,5,7,8,4,2,10,9,4,6}
#11   11     4 {5,7,8,4,2,10,9,4,6,4}
#12   12     3 {7,8,4,2,10,9,4,6,4,3}
#13   13     8 {8,4,2,10,9,4,6,4,3,8}
#14   14     3 {4,2,10,9,4,6,4,3,8,3}
#15   15     9 {2,10,9,4,6,4,3,8,3,9}
#16   16     1 {10,9,4,6,4,3,8,3,9,1}
#17   17     7  {9,4,6,4,3,8,3,9,1,7}
#18   18     3  {4,6,4,3,8,3,9,1,7,3}
#19   19     8  {6,4,3,8,3,9,1,7,3,8}
#20   20    10 {4,3,8,3,9,1,7,3,8,10}
票数 2
EN

Stack Overflow用户

发布于 2016-05-12 22:34:03

我假设有人会想出一种更好的R方式来解决这个问题,从而减少您的运行时。同时,您可以尝试如下:

代码语言:javascript
复制
for (i in 1:nrow(mydf)){
  if(i<=w){
    mydf$eventList[i] = NA
    } 
  else {
    mydf$eventList[i] = list(mydf$event[c((i-w):i)])
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37198237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档