以下是我的示例数据:
Name Value
1 Tom 4
2 Dave 2
3 Frank 3
4 Frank 1
5 Dave 1
6 Tom 1
7 Ri 4
8 Ri 5
我需要上面的数据采用以下格式
# Tom Dave Frank Ri
1 1 1 1 0
2 0 1 0 0
3 0 0 1 0
4 1 0 0 1
5 0 0 0 1
如果获取所需数据格式的代码。请确保我将此代码用于我的big_data,其中包含1048576行和2列。
答案 0 :(得分:4)
这有效:
all_names <- unique(df$Name)
num_cols <- length(all_names)
num_rows <- max(df$Value)
mat <- matrix(0L, num_rows, num_cols,
dimnames = list(NULL, all_names))
mat[cbind(df$Value, match(df$Name, all_names))] <- 1L
mat
# Tom Dave Frank Ri
# [1,] 1 1 1 0
# [2,] 0 1 0 0
# [3,] 0 0 1 0
# [4,] 1 0 0 1
# [5,] 0 0 0 1
关于矩阵是多么稀疏的问题并不是无辜的。如果它非常稀疏,你有兴趣使用稀疏矩阵,因为它将使用更少的内存:
library(Matrix)
mat <- sparseMatrix(i = df$Value, j = match(df$Name, all_names), x = 1L,
dimnames = list(NULL, all_names))