【发布时间】:2018-01-15 08:14:53
【问题描述】:
我可能在这方面想得太认真了,或者想得不够认真。不能决定哪个。我正在使用包 (BBMM) 使用 x,y 坐标和时滞(BBMM 中的 brownian.bridge() 函数所要求的)构建野生动物的运动模型。
我的问题是该功能一次只对一个人起作用。我有一个数据框(绵羊),其中包含 20 多个由 ID(CollarSerialNumber)指定的个体,如下所示:
羊
CollarSerialNumber EASTING NORTHING Time.lag
1 37434 824635.2 2186799 0
2 37434 824640.5 2186798 360
3 37434 824644.8 2186791 360
4 37434 824668.9 2186739 360
5 37434 824637.6 2186786 360
6 37435 824640.7 2186787 360
7 37435 824648.1 2186784 360
8 37435 824653.3 2186789 360
9 37435 824644.7 2186797 360
10 37435 824640.5 2186800 360
11 37436 824637.5 2186791 360
12 37436 824637.5 2186791 360
13 37436 824647.8 2186800 360
14 37436 824644.7 2186796 360
15 37436 824637.6 2186787 360
16....
函数如下所示:
brownian.bridge(x, y, time.lag, location.error, cell.size)
x、y、time.lag由数据框提供,其他两个手动输入。它看起来像这样:
BBMMID=brownian.bridge(x=sheep$Easting, y=sheep$Northing,
time.lag=sheep$Time.lag[-1],
location.error=20, cell.size=30)
当数据框只包含一个 ID 时,该功能可以正常工作。我一直在使用我的整个 csv 文件并根据 ID 将其拆分为 20 多个单独的 csv 文件(一个用于 37434、37435 等),这很好用。然而,该过程是乏味且耗时的。如果列符合特定要求,我正在寻找一种在一组行上应用函数的方法。
例如,如果我想将此函数应用于整个数据框中的 JUST 37434 而无需在 excel 中分解(我对代码不是很有经验,如果你还不能说的话!)如何我去吗?这会是一个 if-then 问题吗?应用功能?子集?
【问题讨论】:
-
apply函数似乎是最佳选择。您可以将brownian.bridge包装在自定义函数中。此函数将获取数据框以及您想要对其进行子集化的任何内容。 -
数据和例子的情况不一样,是帖子有误还是你的代码有误?
-
CollarSerialNumber 在该函数的哪个位置被传递给它?或者换句话说,你怎么知道它只对一个 ID 有效?