繁体   English   中英

如何使用此数据创建矩阵

[英]How to create a matrix using this data

我在做作业/作业时遇到问题,如果有人愿意帮助您,我将不胜感激:)

我有一个名为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”的开始时间。

有什么建议吗?

常见错误:如矢量手册所述指出 ,用向量创建矩阵或数组将按列顺序进行:

数据向量中的值以与FORTRAN中出现的顺序相同的顺序给出数组中的值,即“列主要顺序”,第一个下标移动最快,最后一个下标最慢。

这可以通过观察

matrix(1:4, ncol = 2)

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

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

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)

暂无
暂无

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

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