R中矩阵元素的更新

R中矩阵元素的更新,r,matrix,R,Matrix,我是R新手,在更新矩阵元素方面遇到了一些麻烦。我使用的代码大致如下: library(lubridate) library(Hmisc) file=read.csv(filename) rows<-unique(file$A) columns<-unique(file$B) mat<-matrix(0, nrow=length(unique(file$A)), ncol=length(unique(file$B))) rownames(mat)<-rows colnam

我是R新手,在更新矩阵元素方面遇到了一些麻烦。我使用的代码大致如下:

library(lubridate)
library(Hmisc)

file=read.csv(filename)
rows<-unique(file$A)
columns<-unique(file$B)
mat<-matrix(0, nrow=length(unique(file$A)), ncol=length(unique(file$B)))
rownames(mat)<-rows
colnames(mat)<-columns
第一个输出1,第二个输出0。我不明白为什么会发生这种情况,因为print语句中引用的两个索引是相同的

此外,我还对文件的所有行运行for循环,然后将矩阵写入csv文件。当我检查csv文件时,我看到我得到的似乎是任意的结果。大多数情况下,元素为零,但偶尔也有非零元素。当我与原始文件交叉检查非零元素时;然而,我得到了不同的答案。例如,矩阵中的一个元素是38,但当我检查原始文件时,只有一个条目对应于相同的原点和目标


任何关于为什么会发生这种情况的见解都将不胜感激。

尽量让你的问题重现。我认为这有助于:

origins <- c("A", "B", "C", "D", "A", "B", "A", "B", "E", "D")
dests   <- c("X", "Y", "Z", "X", "U", "V", "X", "T", "Y", "X")

df <- data.frame(origins, dests)
df
#    origins dests
# 1        A     X
# 2        B     Y
# 3        C     Z
# 4        D     X
# 5        A     U
# 6        B     V
# 7        A     X
# 8        B     T
# 9        E     Y
# 10       D     X

table(df$origins, df$dests)
#   T U V X Y Z
# A 0 1 0 2 0 0
# B 1 0 1 0 1 0
# C 0 0 0 0 0 1
# D 0 0 0 2 0 0
# E 0 0 0 0 1 0

你在找表格文件$A,文件$B吗?非常感谢!这起作用了。此外,它至少帮助我确定了我的结果的错误:我的代码生成的矩阵与您建议的代码完全相同,也就是说,两者的数字都在同一个位置,但我的矩阵的行和列的名称不正确。我仍然不知道这是为什么。我不知道你是否能提供任何关于这方面的见解,但如果你能,我将不胜感激!
print(mat[(file[2,]$A),(file[2,]$B)])
print(mat["Origin2", "Destination2"])
origins <- c("A", "B", "C", "D", "A", "B", "A", "B", "E", "D")
dests   <- c("X", "Y", "Z", "X", "U", "V", "X", "T", "Y", "X")

df <- data.frame(origins, dests)
df
#    origins dests
# 1        A     X
# 2        B     Y
# 3        C     Z
# 4        D     X
# 5        A     U
# 6        B     V
# 7        A     X
# 8        B     T
# 9        E     Y
# 10       D     X

table(df$origins, df$dests)
#   T U V X Y Z
# A 0 1 0 2 0 0
# B 1 0 1 0 1 0
# C 0 0 0 0 0 1
# D 0 0 0 2 0 0
# E 0 0 0 0 1 0