如何使用此数据创建矩阵

时间:2013-10-24 05:01:39

标签: r

我在做作业/作业时遇到了问题,如果有人愿意提供帮助,我会很感激你的专业知识:)

我有一个名为raceIDs的文件(看起来像这样):

> raceIDs
[1] "GER" "SUI" "NZ2" "US1" "US2" "POR" "FRA" "AUS" "NZ1" "SWE"

我还创建了一个名为:

的函数
getTimes()

例如,如果我输入:

> getTimes("GER")
[1] "11:10:02" "11:35:05"  #Shows the starting and finishing times

我需要做的是创建一个矩阵,显示所有国家的开始和结束时间。

例如,我应该得到以下结果的矩阵:

> raceTimes
    start        finish
GER "11:10:02"   "11:35:05"
SUI "11:10:02"   "11:35:22"
#and so on....

我的尝试:

> GER <- getTimes("GER")
> SUI <- getTimes("SUI")
> NZ2 <- getTimes("NZ2")
> US1 <- getTimes("US1")
> US2 <- getTimes("US2")
> POR <- getTimes("POR")
> FRA <- getTimes("FRA")
> AUS <- getTimes("AUS")
> NZ1 <- getTimes("NZ1")
> SWE <- getTimes("SWE")

> allTimes<-c(GER, SUI, NZ2, US1, US2, POR, FRA, AUS, NZ1, SWE)
> raceTimes <- matrix(allTimes, ncol=2)
> rownames(raceTimes) <- paste(raceIDs)
> colnames(raceTimes) <- c("start", "finish")

> raceTimes
    start      finish    
GER "11:10:02" "11:10:02"
SUI "11:35:05" "11:34:31"
NZ2 "11:10:02" "11:10:02"
US1 "11:35:22" "11:34:45"
US2 "11:10:02" "11:10:03"
POR "11:34:12" "11:36:48"
FRA "11:10:01" "11:10:01"
AUS "11:33:29" "11:35:16"
NZ1 "11:10:01" "11:10:03"
SWE "11:36:05" "11:35:08"

如上所示,我的矩阵不正确。例如,“GER”(“11:35:05”)的结束结果显示为“SUI”的开始时间。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

常见错误:从向量中创建矩阵或数组按照列主要顺序填充,如introduction manual states ::

  

数据向量中的值给出了数组中的值   在FORTRAN中发生的顺序,即“列主要顺序”   第一个下标移动最快,最后一个下标   最慢的。

这可以通过

来观察
matrix(1:4, ncol = 2)

#      [,1] [,2]
# [1,]    1    3
# [2,]    2    4

最直接的解决方法是在byrow = TRUE来电中添加matrix

matrix(1:4, ncol = 2, byrow = TRUE)

#      [,1] [,2]
# [1,]    1    2
# [2,]    3    4

raceTimes <- matrix(allTimes, ncol=2, byrow = TRUE)

更好的想法是使用rbind上游进行连接而无需将向量串起来:

raceTimes <- rbind(GER, SUI, NZ2, US1, US2, POR, FRA, AUS, NZ1, SWE)

更好的想法是使用循环和sapply,而不是为getTimes中的每个元素输入raceID

raceTimes <- sapply(raceID, getTimes)
raceTimes <- t(raceTimes)