【问题标题】:Find relevant entries in existing data.frame and store these items in a new data.frame在现有 data.frame 中查找相关条目并将这些项目存储在新的 data.frame 中
【发布时间】:2017-08-09 03:44:05
【问题描述】:

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

使用 read.csv(myfilename.csv) 读取到 data.frame 的 CSV 文件的内容:

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");

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

最好的问候, 乔辰

【问题讨论】:

    标签: r


    【解决方案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)
    

    然后cordf3 会给你所有组的相关性

    C <- cor(df3)
    

    【讨论】:

    • 非常感谢,它成功了。最后一行代码只有一个错字。正确的函数是'cor(df3)'。
    • 谢谢。为后代编辑
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-11
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多