R语言处理dataframe:在onset事件前200ms处插入start事件行
R语言DataFrame插入start行解决方案
核心思路:先提取所有event列为onset的记录,批量生成对应time减200ms、event为start的新行,合并到原数据集后按time列排序即可,数千行数据规模下运行效率无压力。
tidyverse 实现(推荐,代码易读性高)
# 加载依赖包 library(dplyr) # 生成需要插入的start行 new_rows <- df1 %>% filter(event == "onset") %>% mutate( time = time - 200, event = "start" ) # 合并数据并按时间排序得到最终结果 df2 <- bind_rows(df1, new_rows) %>% arrange(time)
base R 实现(无需额外安装依赖)
# 定位所有onset记录,生成对应的start行 onset_pos <- which(df1$event == "onset") new_rows <- df1[onset_pos, ] new_rows$time <- new_rows$time - 200 new_rows$event <- "start" # 合并后按时间排序 df2 <- rbind(df1, new_rows) df2 <- df2[order(df2$time), ]
特殊场景适配
如果你的数据存在同时间点多条记录的情况,需要保证start行排在同时间其他记录之前,可以调整排序逻辑:
library(dplyr) df2 <- bind_rows( df1 %>% mutate(sort_weight = 1), new_rows %>% mutate(sort_weight = 0) ) %>% arrange(time, sort_weight) %>% select(-sort_weight)
内容的提问来源于stack exchange,提问作者JJT
相关产品推荐
相关产品推荐

