[英]How to transform a table of dataset to a matrix in R
我有一个像这样的数据集
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
非常感谢您的回答!!
您的组中没有唯一的标识符,并且重复了值( V2
)。 我们可以complete
col1
和col2
值,并用0 fill
index
。为每个组( 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
我们可以在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
注意:未加载任何程序包
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.