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