【问题标题】:Transpose large table in R [duplicate]在R中转置大表[重复]
【发布时间】:2018-10-06 19:30:41
【问题描述】:

假设我有一张桌子排列如下:

Movie ID     User ID
12             123
13             421
17             908
.               .
.               .
.               .

我想把桌子安排如下;

User ID|Movie ID:12  13   17 . . . 671
123                1   1   1         0
421                1   1   1         0
908                1   1   1         0

有没有一种简单的方法可以在 R 中做到这一点,还是我必须编写自定义代码?我希望值是 1/0,具体取决于用户是否观看了电影。

【问题讨论】:

  • 我猜你会发现这很有用:stackoverflow.com/questions/33457501/…
  • 为了更清楚,你必须建立一个sparseMatrix。按照链接的问题,只需将sparseMatrix 中的x 参数设置为1。
  • 我仍然遇到问题警告消息:1:在 asMethod(object) 中:达到 16343Mb 的总分配:请参阅帮助(memory.size)
  • @nicola 实际上它起作用了。有没有办法可以看到实际的用户和电影 ID?我只看到行号和列号。这个函数中有一个选项可以指定吗?

标签: r


【解决方案1】:

我们可以使用table

as.data.frame.matrix(table(df1))
#     12 13 17
#123  1  0  0
#421  0  1  0
#908  0  0  1

或者另一个选项是来自data.tabledcast

library(data.table)#v1.9.6+
dcast(setDT(df1), UserID~MovieID, value.var='MovieID', length)
#   UserID 12 13 17
#1    123  1  0  0
#2    421  0  1  0
#3    908  0  0  1

数据

df1 <- structure(list(MovieID = c(12L, 13L, 17L), UserID = c(123L, 421L,  
908L)), .Names = c("MovieID", "UserID"), class = "data.frame", 
row.names = c(NA, -3L))

【讨论】:

  • 我收到一个错误:错误:无法使用 dcast 代码分配大小为 1.2 Gb 的向量。有大小限制吗?
  • @phil12 您可以在新的 R 会话中尝试第二个选项,即 data.table 吗?如果文件真的很大,您可能需要在具有更多内存的系统上执行此操作。
  • @akrun我确实尝试了第二个选项。我有 16 GB 的 RAM。 R 中是否有我需要指定使用更多内存的选项?
  • @phil12 文件有多大?
  • 大约 5 GB,但我想将其转置以包含很多列会显着增加大小
猜你喜欢
  • 2017-08-05
  • 2016-05-02
  • 2017-09-06
  • 2018-07-13
  • 2016-08-05
  • 2015-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多