【发布时间】:2015-06-14 14:01:15
【问题描述】:
我有一个data.frame,我想在其中删除连续天数的行。例如,我有以下data.frame(头部),它的名字是sell_tv,我想删除具有连续日期的行。在这种特殊情况下,我想删除第 5 行,因为第 5 行和第 6 行有连续的日期。
Date Open High Low Close Sell.TV Buy.TV
1 2015-04-08 2207 2204 2165 2166 4.038113 3.083603
2 2015-03-16 2214 2215 2172 2198 4.041986 3.087017
3 2015-03-05 2343 2364 2320 2324 4.023689 3.081034
4 2015-01-27 2171 2182 2151 2178 4.021998 3.070200
5 2015-01-23 2234 2244 2222 2230 4.032086 3.061206
6 2015-01-22 2278 2282 2242 2246 4.037248 3.095450
我为此编写了以下代码,但得到了:
****"Error in if (sell_tv$Date[i] == sell_tv$Date[i + 1] + 1) { : missing value where TRUE/FALSE needed"****
代码:
for( i in 1:nrow(sell_tv))
{
if (sell_tv$Date[i] == sell_tv$Date[i+1] + 1 )
{
new_sell<- sell_tv[-i,]
}
else
{
new_sell<- sell_tv[,]
}
i= i+1
}
感谢您的帮助!
【问题讨论】:
-
我在您的代码中发现了几个问题。首先,您不需要增加
i,因为R会为您执行此操作(因为这就是R的好处;-))。然后i+1当 i 是nrow(sell_tv)时将不对应于现有行。保持代码基础的一种方法可能是创建一个变量,您可以在其中放置要删除的行数,然后您可以一次将它们全部删除 -
不需要循环。这是一个带有 diff 运算符的逻辑索引的单线:
sell_tv[ c(9999,diff(sell_tv$Date)) != -1, ]