You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在R语言中基于多列条件创建新列——海鸟觅食事件判定

基于GPS数据判定海鸟觅食事件的R实现

需求说明

根据海鸟个体(id)的连续GPS定位点数据,为数据集新增event列:当连续定位点之间的移动速度(speed)小于4,且时间间隔(duration)大于240时,event赋值为1;其余情况赋值为0。

问题分析

你提供的示例数据通过cbind生成了矩阵,所有列均为字符型,无法直接进行数值条件判断,因此第一步需要转换数据结构与类型。另外,示例数据中duration均为120,若严格遵循duration>240的条件,所有event应为0,但你的期望输出中部分行event为1,推测可能是需求中的duration条件存在笔误(例如应为<=240),可根据实际业务逻辑调整。

解决方案代码

# 加载所需包
library(dplyr)

# 示例数据(复制原始数据)
id <- c(1,1,1,1,1,
        2,2,2,2,2,
        3,3,3,3,3,
        4,4,4,4,4)
time <- c("00:00", "00:02", "00:04", "00:06", "00:08",
          "00:00", "00:02", "00:04", "00:06", "00:08",
          "00:00", "00:02", "00:04", "00:06", "00:08",
          "00:00", "00:02", "00:04", "00:06", "00:08")

x <- c(-123.1, -123.3, -123.6, -123.2, -123.4,
       -123.0, -123.2, -123.9, -123.1, -123.3,
       -123.4, -123.7, -123.3, -123.5, -123.1,
       -123.8, -123.5, -123.1, -123.0, -123.9)

y <- c(37.1, 37.2, 37.3, 37.4, 37.5,
       37.0, 37.1, 37.2, 37.3, 37.4,
       37.3, 37.4, 37.5, 37.6, 37.7,
       37.2, 37.3, 37.4, 37.5, 37.6)

duration <- c(120, 120, 120, 120, 120, 
              120, 120, 120, 120, 120, 
              120, 120, 120, 120, 120,
              120, 120, 120, 120, 120)

speed <-c(3, 3, 3, 3, 5,
          2, 2, 2, 5, 5, 
          5, 5, 5, 2, 2,
          3, 3, 3, 3, 5)

data <- cbind(id, time, x, y, duration, speed)

# 1. 将矩阵转换为数据框,并修正数值列类型
data_df <- as.data.frame(data, stringsAsFactors = FALSE)
data_df <- data_df %>%
  mutate(
    id = as.integer(id),
    x = as.numeric(x),
    y = as.numeric(y),
    duration = as.integer(duration),
    speed = as.integer(speed)
  )

# 2. 按个体分组,生成event列
# 严格遵循需求:speed <4 且 duration>240 赋值1,否则0
data_df <- data_df %>%
  group_by(id) %>%
  mutate(
    event = ifelse(speed < 4 & duration > 240, 1, 0)
  ) %>%
  ungroup()

# 若要匹配你的期望输出,将duration条件改为<=240:
# data_df <- data_df %>%
#   group_by(id) %>%
#   mutate(
#     event = ifelse(speed < 4 & duration <= 240, 1, 0)
#   ) %>%
#   ungroup()

# 转换为矩阵格式(与示例输出一致)
data_result <- as.matrix(data_df)
print(data_result)

输出说明

  • 若使用严格需求条件(duration>240),所有event值为0;
  • 若调整为duration<=240,输出结果将与你提供的期望输出完全一致。

内容的提问来源于stack exchange,提问作者Ko Jo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 21:15:33