繁体   English   中英

更新R中的矩阵元素

[英]Updating matrix elements in R

我是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个条目对应于相同的起点和终点。

对于为什么会这样的任何见解将不胜感激。

尝试使您的问题可重复。 我认为这可以帮助:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM