【发布时间】:2014-03-25 12:35:12
【问题描述】:
我想在一个数据帧的 1500 个稀疏行上总结大约 10000 个列,例如 colSparseX。如果我有输入:
(我在 OriginalDataframe 上试过这个:
coldatfra <- aggregate(. ~colID,datfra,sum)
还有这个:
coldatfra <- ddply(datfra, .(colID), numcolwise(sum))
但它不起作用!)
colID <- c(rep(seq(1:6),2), rep(seq(1:2),3))
colSparse1 <- c(rep(1,5), rep(0,4), rep(1,2), rep(0,5), rep(1,2))
cPlSpars2 <- c(rep(1,3), rep(0,6), rep(1,2), rep(0,5), rep(1,2))
coMSparse3 <- c(rep(1,6), rep(0,3), rep(1,2), rep(0,5), rep(1,2))
colSpArseN <- c(rep(1,2), rep(0,7), rep(1,2), rep(0,5), rep(1,2))
(datfra <- data.frame(colID, colSparse1, cPlSpars2, coMSparse3, colSpArseN))
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 1 1 1 1
2 1 1 1 1
3 1 1 1 0
4 1 0 1 0
5 1 0 1 0
6 0 0 1 0
1 0 0 0 0
2 0 0 0 0
3 0 0 0 0
4 1 1 1 1
5 1 1 1 1
6 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 0 0 0 0
2 0 0 0 0
1 1 1 1 1
2 1 1 1 1
并且想要对所有的每个 ID 的元素求和(10000 列 - 需要一些占位符来表示 colnames 是非常可变的词)colSparses 才能得到这个:
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 2 2 2 2
2 2 2 2 2
3 1 1 1 0
4 2 1 2 1
5 2 1 2 1
6 0 0 1 0
注意:str(OriginalDataframe)
'data.frame': 1500 obs. of 10000 variables:
$ someword : num 0 0 0 0 0 0 0 0 0 0 ...
$ anotherword : num 0 0 0 0 0 0 0 0 0 0 ...
在使用 ddply(datfra, .(colID), numcolwise(sum)) 处理的 OriginalDataframe 的较小版本(已终止)上,我得到:
colID colSparse1 cPlSpars2 coMSparse3 colSpArseN
1 0019 0 0 0 0
NA <NA> NA NA NA NA
NA.1 <NA> NA NA NA NA
NA.2 <NA> NA NA NA NA
NA.3 <NA> NA NA NA NA
【问题讨论】:
-
我没有收到这些错误
-
@rawr 你好,再次 :) 非常感谢!我稍微扩展了这个例子,也许你现在得到了错误。但是,该问题可能与
ddply有关(它可能不会那么有效地工作)。是否可以避免ddply? -
我复制了你所有的代码,它运行良好。清除您的工作区并再次运行它。另外,
plyr用于数据帧,数据帧不是矩阵。有一些包有处理稀疏矩阵的方法,我认为Matrix和SparseM。我不使用它们,所以我无法为您指出相关的功能。 -
@rawr 非常感谢!我需要对数据框进行操作(更改标题)。但是idea很好。我将在矩阵上尝试一种解决方法!
-
ddply不是您想要有效地使用data.frames的解决方案。请查看dplyr或data.table。
标签: r plyr sparse-matrix