【发布时间】:2014-06-19 00:01:11
【问题描述】:
我有一个数据框,其中包含 5 个不同盒子中单位的 xyz 坐标,全部为 4x4x8,因此总共有 128 个可能的位置。单位都是不同的长度。因此,即使我知道单位的坐标(3 个单位,左侧 2 个单位,向上 1 个单位),我也不知道该单位在盒子中的确切位置(12' 英寸,14' 左侧,30' 向上?) . z维度对应长度,是我感兴趣的维度。
我的直觉是运行一个 for 循环求和值,但这通常不是 R 中最有效的。for 循环的关键元素如下:
master$unitstartpoint<-if(master$unitz)==1 0
master$unitstartpoint<-if(master$unitz)>1 master$unitstartpoint[i-1] + master$length[i-1]
即如果是z维的第一个,则单元起点为0,否则为前一个单元的起点+前一个单元的长度。这是数据:
# generate dataframe
master<-c(rep(1,128),rep(2,128),rep(3,128),rep(4,128),rep(5,128))
master<-as.data.frame(master)
# input basic data--what load number the unit was in, where it was located
# relative other units
master$boxNumber<-master$master
master$unitx<-rep(c(rep(1,32),rep(2,32),rep(3,32),rep(4,32)),5)
master$unity<-c(rep(1,8),rep(2,8),rep(3,8),rep(4,8))
master$unitz<-rep(1:8,80)
# create unique unit ID # based on load number and xyz coords.
transform(master,ID=paste0(boxNumber,unitx,unity,unitz))
# generate how long the unit is. this length will be used to identify unit
# location in the box
master$length<-round(rnorm(640,13,2))
我猜有一种相对简单的方法可以使用apply 或by 执行此操作,但我不熟悉这些功能。
额外信息:单元 ID 是唯一的,主数据帧分别按 boxNumber、unitx、unity 和 unitz 排序。
这就是我的目标:
length unitx unity unitz unitstartpoint
15 1 1 1 0
14 1 1 2 15
11 1 1 3 29
13 1 1 4 40
任何指导将不胜感激。谢谢!
【问题讨论】:
-
请添加一个所需结果的小例子。