Je pense peut-être trop à ce sujet ou je n'y pense pas assez. Je ne peux pas décider lequel. J'utilise le package (BBMM) pour construire des modèles de mouvement pour la faune en utilisant les coordonnées x, y et le décalage temporel (comme requis par la fonction brownian.bridge() dans BBMM).Application de la fonction si la colonne correspond aux exigences
Mon problème est que la fonction fonctionne sur un individu à la fois. J'ai comme indiqué ci-dessous une trame de données (moutons) avec plus de 20 personnes désignées par un ID (CollarSerialNumber):
moutons
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....
La fonction ressemble à ceci:
brownian.bridge(x, y, time.lag, location.error, cell.size)
x, y et time.lag sont fournis par le bloc de données et les deux autres sont entrés manuellement. Cela ressemble à ceci:
BBMMID=brownian.bridge(x=sheep$Easting, y=sheep$Northing,
time.lag=sheep$Time.lag[-1],
location.error=20, cell.size=30)
La fonction fonctionne correctement lorsque la trame de données comprend un seul ID. J'ai pris mon fichier csv entier et le diviser en 20 fichiers séparés csv en fonction de l'ID (un pour 37434, 37435, etc.) et cela fonctionne très bien. Le processus, cependant, est fastidieux et prend du temps. Je cherche un moyen d'appliquer des fonctions sur un ensemble de lignes si la colonne correspond à une certaine exigence. Par exemple, si je veux appliquer cette fonction à JUST 37434 dans tout le bloc de données sans avoir besoin de casser les choses dans Excel (je ne suis pas très expérimenté avec le code, si vous ne pouvez pas déjà dire!) j'irais à ce sujet? Serait-ce un problème si-alors? Une fonction d'application? Sous-cotation?
La fonction 'apply' semble être la meilleure option. Vous pouvez envelopper le 'brownian.bridge' dans une fonction personnalisée. Cette fonction prendrait le cadre de données ainsi que tout ce que vous voulez le sous-estimer. – Kevin
le cas n'est pas le même dans les données et l'exemple, est-ce une erreur dans la poste ou dans votre code? –
Où dans cette fonction se trouve * CollarSerialNumber * qui lui est passé? Ou en d'autres termes, comment savez-vous que cela ne fonctionne que pour une identification? ( – Parfait