【问题标题】:Delete row n and rows from n to n+ x in dataframe in R在R中的数据框中删除第n行和从n到n + x的行
【发布时间】:2021-11-04 12:30:03
【问题描述】:

我有代表股票价格的数据,有 1 分钟的柱形图。我需要删除对应于每天第一分钟的行和以下 29 行。 每天的第一行在 time_difference 变量处的值总是 >60。 如果我写 del<- df[which(df$time_difference>60),] ,那么 df_new=anti_join(df, sel, by= "Time")我选择每天的第一行。但是,我还需要删除接下来的 29 行。

这是 df 的一个示例,我还添加了一个 time_difference 向量,计算为 Time 变量的每一行和下一行之间的差异(此处未显示)。 df文件可以从here下载

Time Open High Low Close Volume Wap Gap Count 1 1536154200 234.61 234.95 234.57 234.76 302 234.600 0 31 2 1536154260 234.76 235.23 234.76 235.16 135 235.008 0 94 3 1536154320 235.09 235.33 234.88 235.33 121 235.010 0 109 4 1536154380 235.24 235.35 235.08 235.35 24 235.203 0 22 5 1536154440 235.27 235.47 235.22 235.42 62 235.340 0 35 6 1536154500 235.39 235.81 235.39 235.63 136 235.633 0 110

【问题讨论】:

  • 按照here 指南添加一个最小工作示例将帮助您获得最佳答案。
  • anti_join 参数sel 有错字吗?会不会是上面刚刚创建的数据框的名字,目前叫del

标签: r subset


【解决方案1】:

我的原始答案一次只适用于一组行。感谢您分享您的数据。以下是更新的答案。请注意,这对您的数据按时间顺序很敏感,因为我们使用的是行索引而不是实际时间!

dat <- read.csv("MSFT.3years.csv")

startofday <- which(dat$time_difference>60)

removerows <- unlist(Map(`:`, startofday, startofday+29))

dat_new <- dat[-removerows,]

灵感来自这里:Generate sequence between each element of 2 vectors

【讨论】:

  • 谢谢。但是,我收到以下错误: 行中的错误:(行 + 29):NA/NaN 参数此外:警告消息:1:行中:(行 + 29):数值表达式有 18 个元素:仅第一个使用 2 : In row:(row + 29) : 数值表达式有 18 个元素:只使用第一个
  • 我根据您链接的数据更新了我的答案。
  • 谢谢。现在可以了。幸运的是,数据是按时间顺序排列的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-25
  • 2016-09-24
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2015-04-24
  • 1970-01-01
相关资源
最近更新 更多