这是一个开始。
## set up a vector of all 10x10 position tags
tags10 <- c(LETTERS,
paste0("A",LETTERS),
paste0("B",LETTERS),
paste0("C",LETTERS[1:22]))
转换函数(例如){"J",3}
到相应子正方形的中心。
convpos <- function(pos10,pos5) {
## convert letters to major (x,y) positions
p1 <- as.numeric(factor(pos10,levels=tags10)) ## or use match()
p1.x <- ((p1-1) %% 10) *10+5 ## %% is modulo operator
p1.y <- ((p1-1) %/% 10)*10+5 ## %/% is integer division
## sort out sub-positions
p2.x <- ifelse(pos5 <=2,2.5,7.5) ## {1,2} vs {3,4} values
p2.y <- ifelse(pos5 %%2 ==1 ,2.5,7.5) ## odd {1,3} vs even {2,4} values
c(p1.x+p2.x,p1.y+p2.y)
}
usage:
convpos("J",2)
convpos(mydata$tenbytenpos,mydata$fivebyfivepos)
重要笔记:
- 这是一个概念证明,我几乎可以保证 x 和 y 坐标的对应关系不太正确。但是您应该能够逐行追踪并查看它在做什么......
- 它应该在向量上正常工作(参见上面的第二个使用示例):我从
switch
to ifelse
是因为
- 您的列名称(
10x10
)很可能会陷入类似的情况X10.10
将数据读入 R 时:参见?data.frame
and ?check.names