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

如何在R中实现10倍下采样?Matlab已实现求R解决方案

在R中实现按10行间隔下采样的方法

嗨,我来帮你搞定这个R里的下采样问题!你在Matlab里用downsample("file", 10)就能轻松实现每10行取一行,R里其实也有好几种直观的方法,我给你分享几个常用的:

方法1:基础R原生索引(最直接)

如果你的数据已经读入成数据框(比如叫df),直接用序列索引就能完成:

# 生成从第1行开始,步长为10的行索引,提取对应行
downsampled_df <- df[seq(1, nrow(df), by = 10), ]

这里seq(1, nrow(df), by = 10)会生成1,11,21,...这样的行号序列,精准选中每10行里的第一行。

方法2:tidyverse/dplyr风格写法

如果你习惯用tidyverse生态的工具,用dplyr的slice()函数会更简洁:

library(dplyr)

downsampled_df <- df %>%
  slice(seq(1, n(), by = 10))

n()在dplyr的管道语法里会自动识别当前数据框的行数,不用手动写nrow(df),代码更清爽。

方法3:读取文件时直接完成采样(类似Matlab直接处理文件)

如果你的数据还在文件里(比如CSV或TXT),可以在读取的同时完成下采样,省掉中间步骤:

# 用readr包读取CSV并采样
library(readr)
downsampled_df <- read_csv("your_data.csv") %>%
  slice(seq(1, n(), by = 10))

# 或者用基础R的read.table处理文本文件
downsampled_df <- read.table("your_data.txt")[seq(1, nrow(read.table("your_data.txt")), by = 10), ]

扩展:按DEPT/GRC1分组后采样

如果需要在每个DEPT和GRC1的分组内分别按10行间隔采样,只需要加个分组操作:

library(dplyr)
downsampled_df <- df %>%
  group_by(DEPT, GRC1) %>%
  slice(seq(1, n(), by = 10)) %>%
  ungroup()

这样每个分组里都会独立执行每10行取一行的操作,不会跨组打乱采样逻辑。

内容的提问来源于stack exchange,提问作者Alan Carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:43:51