【问题标题】:Converting column values to row and column names将列值转换为行名和列名
【发布时间】:2023-04-07 00:30:01
【问题描述】:

我有一个包含两列 x$x0 和 x$x1 的数据集,以下是此数据集 x 中的值,由于许多重复值,数据集中有超过 1234876 个观察值。

x0            x1
----------------
0             1
0             2
1             0
1             3
2             1
2             3
.             .
.             .
.             .
1234876       1230000

我想创建一个矩阵,使用 column1 中的唯一值 (x$x0) 和 column2 中的唯一值 (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 |                      |
--------------------------------

希望这是有道理的 :(,任何关于如何做到这一点的建议都会非常有帮助。

【问题讨论】:

  • 发布可重现的代码示例(来自dput(x) 的输出),以便我们为您提供帮助。
  • @smci 我做了 dput(x) ....我得到了一百万行这样的东西 180485L, 180485L, 180485L, 180485L, 180485L, 180486L, 180486L, 180486L, 180486L, 18704L8486 ,180487L,180487L,180487L,180488L,180488L,180488L,180488L,180488L,180488L,1804881,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180489L,180490L,180490L,180490L, SPAN>
  • @TyroneWilliams 您可以通过dput(x[1:20, ]) 获取数据的前 20 行,这应该足够了。
  • @n8sty dput(x[1:20, ]) 结构(列表(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") >
  • @TyroneWilliams 两个向量之间的关系是什么意思?

标签: r


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-21
    • 2013-01-23
    • 2022-09-24
    • 2016-02-25
    相关资源
    最近更新 更多