我想在动物轨迹的每个GPS位置周围15公里半径内创建20个随机位置(请参见示例).
我可以用st_buffer
和st_sample
来做这件事,但是我在用曲目ID(总计ID~200)来注释随机采样的位置时遇到了麻烦.我需要注释随机采样的位置,以便我可以将该数据帧连接回观察到的轨道位置,其中20个随机位置中的每一个都与观察到的位置和ID相关联.
数据帧的一个简单示例如下所示,其中我有一个动物标识符(Id)、地理坐标(x,y)和时间戳(Time):
df <- data.frame(id = c("id1", "id1", "id1", "id2", "id2", "id2"),
long = c(-80, -81, -82, -79, -70, -75),
lat = c(36, 37, 38, 41, 40, 40.5),
time = c(7, 8, 9, 6, 7, 8)
)
我想知道是否可以用id
个列来命名缓冲区,然后用st_join
个随机位置来命名缓冲区,这样随机采样的位置就可以拥有原始数据帧中的列标识符了.但这能满足用观测到的位置标注位置的要求吗?只是一个 idea .到目前为止,我的代码如下所示.
random_locs <- df %>%
st_as_sf(., coords = c("x","y"), crs = "epsg:4326") %>%
st_transform(., crs = "epsg:26915") %>%
#filter(class == "stopover") %>% # don't worry about this
group_by(id) %>%
st_buffer(., dist = 15000) %>%
#st_dissolve(.) %>%
mutate(BirdsID_season = BirdsID_season) %>% # can I add a name to the buffers?
st_sample(., size = rep(20,nrow(.)), "random", exact = TRUE) %>%
st_as_sf(.) %>%
mutate(used = 0) %>%
ungroup()
就位置的数量而言,输出是正确的,但是我没有任何信息来注释原始标识符来连接数据帧.我们非常感谢您的任何建议.
EDIT个 我正在编辑问题以详细说明我想要的输出:最终目标是在一个整齐的框架中拥有观察到的位置(=1)和随机位置(=0).随机位置必须根据观察到的位置(时间、x、y)和动物ID有条件地生成,并进行相应的注释,以便生成单个二项响应(0/1,真/假,观察/随机).输出将类似于下面两个人的df.我简单地向原始df添加了3行,其中对于每个使用的位置,每个id都会生成一个随机位置:
final_df <- data.frame(id = c("id1", "id1", "id1", "id1", "id1", "id1",
"id2", "id2", "id2", "id2", "id2", "id2"),
long = c(-80, -81, -82, -82,-82.5, -81
-79, -70, -75, -82.5, -79.5, -79),
lat = c(36, 37, 38, 37, 36.5, 37,
41, 40, 40.5, 40, 42, 40.5), # these are all made up
time = c(7, 8, 9, 7, 8, 9,
6, 7, 8, 6, 7, 8), # time wouldn't change w/ addition of random locs
type = c("1", "1", "1", "0", "0", "0",
"1", "1", "1", "0", "0", "0") # or TRUE/FALSE, yes/no, observed/random
)