首页 > 解决方案 > 计数数据框 R 中的事件

问题描述

我想分别计算数据框中的发生次数,其中 100 行 100 个用户和 5 列用户 ID、所有进行的事件和 thress 事件。对于每个用户,我想分别在第 3 列到第 5 列中计算事件,这些事件在第 2 列中一起在 "" 中列出并用逗号分隔(例如 (c("stroke", "mouseclick1","mouseclick2")) .

我的代码如下所示:

frame <- data.frame(matrix(ncol = 5, nrow = length(my.data))) 

x <-c("user","eventsall","mouseclick1","mouseclick2","stroke")

colnames(frame) <- x
frame$user <- c(1:length(my.data))
frame$eventsall <- as.character(frame$workflow)
frame$mouseclick1 <- ?????
frame$mouseclick2 <- ?????
frame$stroke <- ?????

如何定义三个变量(上图),以便能够计算框架内每个用户的每个事件的频率?

第一个循环是正确的,但第二个循环是错误的,我可以对 mouseclick2 和 stroke 重复。函数str_count是否正确?

for (i in frame$user) {
  if (is.na(my.data[[i]][["scenario1"]]) == TRUE) {
    frame$eventsall[i] <- NA
  }
  else {
    frame$eventsall[i] <- list(my.data[[i]][["scenario1"]][["events.all"]])
  }
}

for (i in frame$user) {
  if (is.na(my.data[[i]][["scenario1"]][["events.all"]]) == TRUE) {
    frame$mouseclick1[i] <- NA
  }
  else {
    frame$mouseclick1[i,3] <- str_count(my.data[[i]][["scenario1"]][["events.all", pattern="mouseclick1"]])
  }
}
View(frame)

非常感谢!

标签: rdataframecount

解决方案


您可以使用分隔逗号分隔的字符串strsplit,然后循环遍历数据的每一行。

# Sample data since none was provided
frame <- data.frame(user=c(1:5),
                    eventsall=c('1,2,3',
                                '3,4,6',
                                '5,3,2',
                                '7,4,5',
                                '6,6,5'))

frame$eventsall <- as.character(frame$eventsall)

events.split <- strsplit(frame$eventsall,',')

for(i in 1:nrow(frame)){
  frame$mouseclick1[i] <- events.split[[i]][1]
  frame$mouseclick2[i] <- events.split[[i]][2]
  frame$stroke[i] <- events.split[[i]][3]
}

推荐阅读