我有一个包含两列的数据集,x $ x0和x $ x1及以下是此数据集x中的值,由于许多重复值,数据集中有超过1234876个观察值。
x0 x1
----------------
0 1
0 2
1 0
1 3
2 1
2 3
. .
. .
. .
1234876 1230000
我希望使用第1列中的唯一值(x $ x0 )和第2列中的唯一值(x $ x1)创建矩阵 >。 x $ x0中的值将是x $ x1中的行名称和值将是列名称。
然后将值1分配给x $ x0和x $ x1之间关系出现的单元格,最终结果应该看起来像这样......
| 0 1 2 3 .......1230000
--------------------------------
0 | 1 1 |
1 | 1 1 |
2 | 1 1 |
3 | |
. | |
. | |
. | |
1234876 | |
--------------------------------
希望这是有道理的:(任何有关如何做到这一点的建议都会非常有用。
答案 0 :(得分:1)
告诉你的问题有点难,但这有用吗?它应该创建一个数据框,其中x0
值为行,x1
值为列。所有观察都成为了NA,但你可以把其他东西放在那里。
修改:我已根据您的更改并使用您的dput
输出对此进行了更新。现在,这会创建一个矩阵,其行名称对应X0
,其副本名称对应X1
。
df <- structure(list(X0 = c(0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L,
2L, 3L, 3L, 3L, 3L, 3L, 4L),
X1 = c(2L, 3L, 4L, 5L, 0L, 2L, 4L, 5L, 15L, 0L, 11L, 12L,
13L, 14L, 63L, 64L, 65L, 66L, 67L, 7L)),
.Names = c("X0", "X1"), row.names = c(NA, 20L),
class = "data.frame")
library('reshape2')
df_new <- dcast(df, X0 ~ X1, function(x) ifelse(length(x) >= 1, 1, 0))
rownames(df_new) <- df_new$X0
as.matrix(df_new[-1])
# 0 2 3 4 5 7 11 12 13 14 15 63 64 65 66 67
# 0 0 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0
# 1 1 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0
# 2 1 0 0 0 0 0 1 1 1 1 0 0 0 0 0 0
# 3 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1
# 4 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0