循环遍历整个数据帧

时间:2016-02-19 19:17:45

标签: r loops

for (i in 1:49)

  i <- 1
    lat1 <- df1[1,6]
    lat2 <- df2[i,5]
    lon1 <- df1[1,7]
    lon2 <- df2[i,6]

    d= acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
    if ((d < 8.05)){
          print("true")
          }else{
          print("false")
          }

i <- i+1}

我遇到了这个循环的问题,我试图让代码遍历每个代表df 2中的行的i但是我需要代码来搜索df1中每一行的给定条件(该列始终保持不变相同)。

我一直收到错误:

> In if ((d < 8.04672)) { ... : the condition has length > 1 and only
> the first element will be used

1 个答案:

答案 0 :(得分:0)

你可以更有效地写这个,即没有循环:

lat1 <- df1[1,6]
lon1 <- df1[1,7]

lat2 <- df2[1:49,5]
lon2 <- df2[1:49,6]

d <- acos(sin(lat1)*sin(lat2)+cos(lat1)*cos(lat2)*cos(lon1-lon2))
d < 8.05

您使用的所有功能(sincosacos)都可以将矢量作为输入。基本运算符(在本例中为*-)逐个元素地工作,因此这也确保您可以单独操作每个元素。因此,d将是所有acos值的向量。

然后你似乎想要一个逻辑向量(所有值TRUEFALSE)。为此,只需将d置于逻辑操作(>)。由于逻辑运算符也可以采用向量,因此将根据其真值来评估所有值。