从R中的2列之间的计算生成输出

时间:2014-03-18 22:42:53

标签: r vectorization

我有一个数据集,表示相对于时间在2d环境中的移动:

 time(s) start_pos fwd_dist rev_dist end_pos
 1       0.0       4.0      -3.0     2.0
 2       2.0       5.1      0.5      3.0
 3       3.0       4.7      -0.5     3.5
 4       3.5       3.6      -1.8     2.1
 5       2.1       2.6      -2.1     1.0
 6       1.0       1.5      -1.5     -0.2

我想创建另一个列,这是检查的结果,看看“end_pos”和“start_pos”之间哪个更大,并从“fwd_dist”中减去更大的数字。我正试图遍历数据集,但似乎正在努力解决R

中的语法问题
 i<-0
 while (i < length(data[,1]){if (data[i,4] > data[i,1]){print (data[i,2]-data[i,4])} else {print (data[i,2]-data[i,1])}; i<-i+1} 

我一直收到错误:

 Error in if (data[i, 4] > data[i, 1]) { : 
   argument is of length zero

2 个答案:

答案 0 :(得分:2)

pmax(start_pos,end_pos)

将为您提供两个向量的并行最大值(即,分量)。所以你可能正在寻找

fwd_dist-pmax(start_pos,end_pos)

答案 1 :(得分:1)

基于数据框架的方法:

data$difference <- data$fwd_dist - pmax(data$start_pos, data$end_pos)