我有以下数据框 -
数据框如下所示:
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
建议和帮助将不胜感激。