r - 计数数据框 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)
非常感谢!
解决方案
您可以使用分隔逗号分隔的字符串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]
}
推荐阅读
- mysql - mysql?Plesk Ec2 aws 错误 100% full xvda1
- javascript - 选择具有两个数组选项的对象应该选择什么值
- forms - 客户端验证和客户端表单验证
- python - 如何使用 Python Selenium 将任何网页翻译成英文并保存其完整的网页截图?
- amazon-web-services - AWS 支持每个 ALB 侦听器的多个目标组
- php - 如何在 PHP 中合并两个不相等的多维数组?
- arrays - 我想将标题返回给每个数组而不是一组数字。JSON解码斯威夫特
- express - Stripe CLI 触发随机事件而不是 payment_intent.succeeded
- tsc - 如何在 lerna monorepo 中使用 lint-staged 在所有包中运行相同的命令?
- javascript - JS时区错误偏移