0

我有这样的数据框:

      V1     V2     LABEL
    1 83965 891552   A
    2 88599 891552   B
    3 42966 891552   C
    4 83965 891553   D
    5 88599 891553   D
    6 42966 891553   B

如何将其转换为邻接矩阵之类的东西,但是在我想要的列行的交叉点上,第三列值是这样的:

        891552 891553
  42966      C      B
  83965      A      D
  88599      B      D

@Henrik

我得到了这样的错误。我认为这个段错误是由大数据引起的。

Using label as value column: use value.var to override.
Aggregation function missing: defaulting to length

 *** caught segfault ***
address 0x7fff1e099a90, cause 'memory not mapped'

Traceback:
 1: .Call("split_indices", group, as.integer(n))
 2: split_indices(.group, .n)
 3: vaggregate(.value = value, .group = overall, .fun = fun.aggregate,     ..., .default = fill, .n = n)
 4: cast(data, formula, fun.aggregate, ..., subset = subset, fill = fill,     drop = drop, value.var = value.var)
 5: dcast(dat, item ~ worker)
Any idead how it is possible to get rid of it?

我放弃了使用 R 的尝试并使用了 Python,因为所有解决方案:tapply、dcast、reshape、cast 的性能都非常差,导致整个系统挂起数小时。

但是:如果您知道一些可以有效处理大量数据的解决方案,请告诉我

4

2 回答 2

3

你可以试试这个,df你的数据框在哪里:

library(reshape2)
dcast(df, V1 ~ V2)

#      V1 891552 891553
# 1 42966      C      B
# 2 83965      A      D
# 3 88599      B      D
于 2013-09-18T21:20:21.930 回答
3

尝试使用该data.table软件包。您实际上可以在baseR 中使用tapply. 这应该很快,因为它在data.table...上运行

require(data.table)
DT <- data.table(df)
tapply(DT$LABEL , list(DT$V1,DT$V2) , as.character )

#      891552 891553
#42966 "C"    "B"   
#83965 "A"    "D"   
#88599 "B"    "D" 

希望那会很快。

于 2013-09-18T22:15:46.253 回答