簡體   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