在现有data.frame中查找相关条目,并将这些项存储在新的data.frame中

时间:2017-08-07 22:17:29

标签: r

我有一个data.frame,想要计算用户的相关性和不同体育赛事的评分。在像Java这样的编程语言中,我可能会使用两个for循环来创建我的新数据框或集合。我猜在R中有更舒适的方法来实现这个目标吗?

我的CSV文件的内容,使用read.csv(myfilename.csv)读入data.frame:

id;User als userName;Event als EventName;RatingDate;RatingValue;
01;joba;Fußball;2017-05-18 16:10;5;
02;joba;Volleyball;2017-05-18 16:11;4;
03;joba;Nordic-Walking;2017-05-18 16:12;2;
04;joba;Yoga;2017-05-18 16:13;1;
05;joba;Kraftsport;2017-05-18 16:14;3;
06;mamu;Fußball;2017-05-18 16:10;5;
07;mamu;Volleyball;2017-05-18 16:11;3;
08;mamu;Nordic-Walking;2017-05-18 16:12;3;
09;mamu;Yoga;2017-05-18 16:13;2;
10;mamu;Kraftsport;2017-05-18 16:14;3;
11;ermu;Fußball;2017-05-18 16:10;1;
12;ermu;Volleyball;2017-05-18 16:11;2;
13;ermu;Nordic-Walking;2017-05-18 16:12;4;
14;ermu;Yoga;2017-05-18 16:13;4;
15;ermu;Kraftsport;2017-05-18 16:14;1;

如您所见,第2列中有userName,第3列中有eventName。此外,在最后一列中有一个评级值。现在我需要根据用户的评级来建立用户相似性之间的相关性,即

x = c(5,4,2,1,3); # joba
y = c(5,3,3,2,3); # mamu
z = c(1,2,4,4,1); # ermu
# Korrelation joba-mamu
dfxy = data.frame(x,y);
dfxz = data.frame(x,z);
resxy = cor(dfxy, method = "pearson");
resxz = cor(dfxz, method = "pearson");

当然,向量需要排序并与相同类型的事件相关。我想知道从我的未排序数据中获取相关计算所需的向量的最佳方法是什么?

祝你好运, 约亨

2 个答案:

答案 0 :(得分:1)

查看recommenderlab package。它包含一些基本的协同过滤算法和评估它们的函数。

答案 1 :(得分:1)

使用tidyverse

install.packages("tidyverse")
library(tidyverse)

UserEvent

排序
df1 <- df %>%
          arrange(User, Event)

df

User拆分为一个列表
df2 <- split(df1, df1$User)

使用map_dfRatingValue转换为自己的data.frame

df3 <- map_df(df2, ~.x$RatingValue)

然后cor的{​​{1}}将为您提供所有群组的相关性

df3