将csv文件转换为R中的矩阵

时间:2017-03-30 17:20:35

标签: r csv matrix

我有一个csv文件

 User_name    M_User    Total
    user 1    user 2     7
    user 1    user 3     19
    user 1    user 7     5
    user 3    user 2     1
    user 2    user 7     1 

我希望以矩阵形式转换它

            user 1  user 2  user 3  user 7
user 1        0        7     19       5
user 3        0        1      0       0
user 2        0        0      0       1
user 7        0        0      0       0

我现在正在做的事情是这样的

require(reshape2)
m <- as.matrix(dcast(df, USER_NAME ~ M_USER, value.var = "TOTAL", fill=0))[,1:4]

但我得到的答案是

 USER_NAME   user 2 user 3 user 7
[1,] "user 1"  "7"    "19"   "5"   
[2,] "user 2"  "0"    " 0"   "1"   
[3,] "user 3"  "1"    " 0"   "0"

如何修改代码以便获得此矩阵

            user 1 user 2 user 3  user 7
user 1        0        7     19       5
user 3        0        1      0       0
user 2        0        0      0       1
user 7        0        0      0       0

2 个答案:

答案 0 :(得分:0)

我们可以使用xtabs

中的base R执行此操作
xtabs(Total ~User_name + M_User, df, drop = FALSE)
#         M_User
#User_name user 1 user 2 user 3 user 7
#  user 1      0      7     19      5
#  user 2      0      0      0      1
#  user 3      0      1      0      0
#  user 7      0      0      0      0

此外,来自acast的{​​{1}}可提供reshape2输出

matrix

数据

library(reshape2)
acast(df, User_name ~ M_User, value.var = "Total", fill=0, drop = FALSE)
#       user 1 user 2 user 3 user 7
#user 1      0      7     19      5
#user 2      0      0      0      1
#user 3      0      1      0      0
#user 7      0      0      0      0

答案 1 :(得分:0)

使用tidyr::spread功能如下:

require(tidyr)
df %>% spread(key=M_User,value = Total,fill = 0)