我需要使用r语言的以下格式的数据

时间:2013-11-13 03:39:37

标签: r bigdata dataformat

以下是我的示例数据:

    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列。

1 个答案:

答案 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))