使用具有字符值的稀疏矩阵进行透视/ Dcast

时间:2018-04-03 19:06:03

标签: r dataframe dplyr data.table tidyr

我有以下数据框 -

数据框如下所示:

id <- c(1,2,2,2,2,3,3,3,4,4)
col <- c("a","a","b","c","d","b","c","d","a","b")
val <- as.character(c("t1","x1","x2","x3","x4","y2","y3","y4","z1","z2"))
values <- data.frame(id,col,val, stringsAsFactors = FALSE)

> values
   id col val
1   1   a  t1
2   2   a  x1
3   2   b  x2
4   2   c  x3
5   2   d  x4
6   3   b  y2
7   3   c  y3
8   3   d  y4
9   4   a  z1
10  4   b  z2

我正在尝试使用以下代码

使用sparseMatrix()在数据框上方转移
data = transform(values,id = as.factor(id),col = factor(col))
data.sparse = Matrix::sparseMatrix(as.integer(data$id), as.integer(data$col))
colnames(data.sparse) = levels(data$col)
rownames(data.sparse) = levels(data$id)
test <-  as.data.frame.matrix(data.sparse)
test <- 1 * test

我可以将上述方法用于数值数据。 但是,我知道sparseMatrix()不支持x=as.character(val)

中的sparseMatrix()

注意 - 由于漫长的矢量问题,我无法使用data.table::dcast()reshape::dcast()

还有其他方法可以在R中处理非常大的数据旋转吗?

请查看以下所需的输出:

> output
   id  a  b  c  d
1:  1 t1  0  0  0
2:  2 x1 x2 x3 x4
3:  3  0 y2 y3 y4
4:  4 z1 z2  0  0

建议和帮助将不胜感激。

0 个答案:

没有答案