更新R中的矩阵元素

时间:2015-03-24 17:20:54

标签: 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
colnames(mat)<-columns

这是一个非常简单的设置。该文件有几列。我想要的是形成两列的矩阵。一列将用作矩阵的行,另一列用作列。一个例子是包含有关飞机飞行的各种信息的文件,而A列是指航班的起源,而B列是指航班的目的地。因此,矩阵将是原点矩阵和目的地,其中每个元素将是从特定原点到特定目的地的航班数。由于我是R的新手,我在原始文件的有限部分尝试了我的方法:

for (i in 1:10){
  inc(mat[(file[i,]$A),(file[i,]$B)])<-1
}

inc函数是Hmisc库的一部分,用于增加变量。

当我运行以下打印语句时,例如:

print(mat[(file[2,]$A),(file[2,]$B)])
print(mat["Origin2", "Destination2"])

第一个输出1,而第二个输出0.我不明白为什么会发生这种情况,因为print语句中的两个索引是相同的。

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

对于为什么会发生这种情况的任何见解都将非常感激。

1 个答案:

答案 0 :(得分:1)

尝试让您的问题重现。我认为这可能会有所帮助:

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