楼主: zzp_1988
7543 12

[问答] R语言输出满足条件的元素的值,急切求助!! [推广有奖]

  • 2关注
  • 0粉丝

等待验证会员

大专生

38%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
1.0005
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
223 点
帖子
26
精华
0
在线时间
37 小时
注册时间
2014-1-11
最后登录
2019-4-2

楼主
zzp_1988 发表于 2015-2-9 16:17:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
如下表,列分别表示用户ID, 电影ID和评分ID
UserID MovieID Rating
1 43 23 3
2 43 42 1
3 2 123 2
4 58 3 5
5 2 545 4
6 44 8 3
7 3 45 2
8 2 32 1
9 43 44 4
如何得到每个用户评分大于3全部电影,并且将这些电影按照ID的升序作为一行写入到文本文档中。
例如:
User1:3,4,6,7
User2: 45,123,545   
...............
User43: 23,42,44
感谢各位大神了!


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:R语言 RATING UserID Movie User 查询 输出

沙发
dataorz 发表于 2015-2-9 17:22:54
movie <- data.frame(list(UserID=c(43,43,2,58),MovieID=c(23,42,123,3),Rating=c(3,1,2,5)))
movie <- subset(movie,Rating>=3)
movie <- movie[with(movie,order(MovieID)),]
write.table(movie, file = "movie.txt")
自己参考改一下吧
已有 1 人评分论坛币 收起 理由
admin_kefu + 20 热心帮助其他会员

总评分: 论坛币 + 20   查看全部评分

藤椅
有机骆驼/sun 在职认证  发表于 2016-11-14 20:54:59
其实,我比照着写了一下代码。。。不行咯

板凳
止水之涯 发表于 2016-11-14 22:02:43
  1. 初学者来献丑给个答案,没理解你是需要按照 UserID 排序还是按照 UserID & MovieID 一起排序,我两个都放进去了,data 数据我从网页复制后随便改了几个数字。

  2. data
  3.   UserID MovieID Rating
  4. 1     43      23      4
  5. 2     43      42      3
  6. 3      2     123      2
  7. 4     58       3      5
  8. 5      2     545      4
  9. 6     44       8      3
  10. 7      3      45      2
  11. 8      2      32      3
  12. 9     43      44      4
  13. data1 <- data[which(data$Rating >= 3),]
  14. data2 <- data1[order(data1$UserID,data1$MovieID),]
  15. data3 <- aggregate(data = data2,MovieID~UserID,FUN = function(x) list(x))

  16. data3
  17.   UserID    MovieID
  18. 1      2    32, 545
  19. 2     43 23, 42, 44
  20. 3     44          8
  21. 4     58          3

  22. 写入TXT的过程没写,这个过程你自己琢磨下吧,write.table 即可实现。
复制代码

已有 1 人评分经验 论坛币 收起 理由
李会超 + 80 + 20 精彩帖子

总评分: 经验 + 80  论坛币 + 20   查看全部评分

报纸
止水之涯 发表于 2016-11-14 22:05:20
咦,排序那一步,有几个 美元 符号不见了,不过大家应该都看得懂。。。。

地板
hugebear 发表于 2016-11-15 13:13:47
这个问题也可以用dplyr包来实现,几个关键的函数是group_by, filter和arrange。在这里我用%>%符使程序更简洁一些(可读性未必好):
  1. movie <- data.frame(UserID = c(43, 43, 2, 58, 2, 44, 3, 2, 43),
  2.                     MovieID = c(23, 42, 123, 3, 545, 8, 45, 32, 44),
  3.                     Rating = c(3, 1, 2, 5, 4, 3, 2, 1, 4))

  4. movie

  5. library(dplyr)

  6. movie2 <- movie %>%
  7.   group_by(UserID) %>%
  8.   filter(Rating >= 3) %>%
  9.   arrange(UserID)
复制代码
已有 1 人评分经验 论坛币 收起 理由
admin_kefu + 50 + 30 热心帮助其他会员

总评分: 经验 + 50  论坛币 + 30   查看全部评分

7
hugebear 发表于 2016-11-15 14:45:03
不知为何原回帖无法编辑,所以重新回复。相对于整理数据,这个问题更困难的地方在于写文件---因为MovieID每个元素的长度不同, 写文件决非直接使用write.table那么简单。下面是我的一种解法尝试:用循环,每次循环写入一行数据。
  1. movie <- data.frame(UserID = c(43, 43, 2, 58, 2, 44, 3, 2, 43),
  2.                     MovieID = c(23, 42, 123, 3, 545, 8, 45, 32, 44),
  3.                     Rating = c(3, 1, 2, 5, 4, 3, 2, 1, 4))
  4. library(dplyr)

  5. movie1 <- movie %>%
  6.   group_by(UserID) %>%
  7.   filter(Rating >= 3) %>%
  8.   arrange(UserID)

  9. movie2 <- aggregate(MovieID ~ UserID, data = movie1[, -3], list)

  10. # Do some preparation for writing .txt
  11. UserID_new <- paste0("User", movie2$UserID, ":")
  12. movieid <- movie2$MovieID # It is a list!

  13. # Write the file

  14. for (i in 1:nrow(movie2)) {
  15.   cat(UserID_new[i], movieid[[i]], "\n", file = "output.txt", append = TRUE)
  16. }
复制代码
(不得不吐槽一下,论坛的回帖功能实在太不稳定了,每次编辑都会删掉我贴出代码的一部分,令人十分郁闷。什么时候能修复这方面的bug?)

8
hugebear 发表于 2016-11-15 14:59:25
止水之涯 发表于 2016-11-14 22:02
“用write.table即可实现”是不对的。您可以试一试,会报错。

9
止水之涯 发表于 2016-11-15 20:02:55
hugebear 发表于 2016-11-15 14:59
“用write.table即可实现”是不对的。您可以试一试,会报错。
是的,是会报错,学习了~~~

10
test113579 在职认证  企业认证  发表于 2016-11-17 01:38:55
hugebear 发表于 2016-11-15 14:45
不知为何原回帖无法编辑,所以重新回复。相对于整理数据,这个问题更困难的地方在于写文件---因为MovieID每 ...
(不得不吐槽一下,论坛的回帖功能实在太不稳定了,每次编辑都会删掉我贴出代码的一部分,令人十分郁闷。什么时候能修复这方面的bug?)

不知是哪一部分,我这里没有测试出来

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 21:24