我有一个名为predictors
的数据框,其列为session_id
和item_id
。
我想计算属于一个特定会话的所有项目的计数(在整个数据框中)。
我使用了这样的聚合方法:
popularity <- aggregate(predictors$item_id,
FUN = function(items) {(table(predictors$item_id[predictors$item_id %in% items]))},
by = list(predictors$session_id))
这基本上计算属于一个特定会话的所有项目的计数列表(通过predictors
)。
e.g。如果有session1 - item1
和session1 - item2
两个记录,我想获取predictors
和item1
的计数列表(在整个item2
数据框中)反对session1
。 (类似于session1 - (10, 20)
,item1
在数据集中出现10次,等等。)
我使用上述aggregate
方法获取此信息。但我想使用data.table
让它更快地运作。
直到现在我已尝试使用data.table,如下所示:
predictors_data.table <- data.table(predictors)
popularity <- predictors_data.table[ , list(p = table(predictors_data.table$item_id[items_list %in% item_id])),
by = c('session_id')]
但我只计算第一项而非一个特定会话的所有项目。
答案 0 :(得分:2)
以下是使用 if ($count > 0) {
if ($row['Password'] == $password){
$_SESSION['status'] = $row['Access'];
$_SESSION['name'] = $row['Name'];
header('Location: ./Home.php');
}
else{
echo "<p id='logInError'>Password incorrect</p>" ;
}
} else {
echo "<p id='logInError'>Username incorrect</p>" ;
}
实现此目的的简单方法:
dplyr
给出了输出:
# devtools::install_github("trinker/wakefield")
library(wakefield)
wakefield::r_data_frame(n = 1000,
session_id = r_sample(x = 1:10),
item_id = r_sample(x = 1:10)
) %>%
dplyr::count(item_id, session_id)
答案 1 :(得分:2)
这里是data.table
函数的table
类似物:
predictors_data.table[,.N,by=c("session_id","item_id")]
# session_id item_id N
# 1: 1 1 106
# 2: 1 2 99
# 3: 1 3 115
# 4: 2 1 121
# 5: 2 2 110
# 6: 2 3 115
# 7: 3 1 122
# 8: 3 2 103
# 9: 3 3 109
然而,table
在视觉上要好得多;你不想看到利润吗?
with(predictors,table(session_id,item_id))
# or...
with(predictors_data.table,table(session_id,item_id))
# item_id
# session_id 1 2 3
# 1 106 99 115
# 2 121 110 115
# 3 122 103 109
如果您只是运行此代码一次,我认为没有理由更喜欢.N
到table
。但是,如果您想要存储它,predictors_data.table[,count:=.N,by=c("session_id","item_id")]
可以很方便。
示例数据,复制@fgnu:
require(wakefield)
set.seed(1)
predictors <- wakefield::r_data_frame(
n = 1000,
session_id = r_sample(x = 1:3),
item_id = r_sample(x = 1:3)
)