【问题标题】:How to transform a table of dataset to a matrix in R如何将数据集表转换为R中的矩阵
【发布时间】:2019-04-18 10:37:47
【问题描述】:

我有一个这样的数据集

df <- data.frame("col1" = c("a", "b", "a", "c", "d", "e", "f", "c"), "col2" = c("v2", "v2", "v2", "v3", "v4", "v1", "v2", "v4"), "index" = c(3,1,3,0,1,2,3,0))

我希望得到这样的矩阵:

  v1 v2 v2 v3 v4
a 0  3  3  0  0
b 0  1  0  0  0
c 0  0  0  0  0
d 0  0  0  0  1
e 2  0  0  0  0
f 0  3  0  0  0

非常感谢您的回答!!

【问题讨论】:

  • 试试tidyr::spread
  • 你可以试试:table(df).

标签: r datatable transform


【解决方案1】:

您的组中没有唯一标识符,并且值 (V2) 重复。我们可以将 complete col1col2 值和 fill index 设置为 0。为每个组创建唯一标识符 (col1),然后为值创建 spread

library(tidyverse)

df %>%
  complete(col1, col2, fill = list(index = 0)) %>% 
  group_by(col1) %>%
  mutate(col2 = paste0("V", row_number())) %>%
  spread(col2, index, fill = 0)

#  col1     V1    V2    V3    V4    V5
#  <fct> <dbl> <dbl> <dbl> <dbl> <dbl>
#1 a         0     3     3     0     0
#2 b         0     1     0     0     0
#3 c         0     0     0     0     0
#4 d         0     0     0     1     0
#5 e         2     0     0     0     0
#6 f         0     3     0     0     0

【讨论】:

  • 如果我想保留重复的 v2 怎么办?
  • @JimmyLee 重复的V2 仍然存在,只是重命名为V3。如果您想重命名它,请将其保留为V2,您可以在链的末尾添加%&gt;% rename_at(4,~"V2")
【解决方案2】:

我们可以在base R 轻松做到这一点

xtabs(index ~ col1 + col2, unique(df))
#  col2
#col1 v1 v2 v3 v4
#   a  0  3  0  0
#   b  0  1  0  0
#   c  0  0  0  0
#   d  0  0  0  1
#   e  2  0  0  0
#   f  0  3  0  0

注意:未加载任何包

【讨论】:

    猜你喜欢
    • 2017-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-29
    • 2017-03-22
    • 2021-09-29
    • 2013-06-08
    • 1970-01-01
    相关资源
    最近更新 更多