[英]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.