我发现很难绕过这个: 在下面的数据框中,我想删除每个计数/列表之后的下一行,比如星期四,同样是星期五,依此类推。由于数据很大,我宁愿不使用循环。
mydata<- read.table(header=TRUE, text="
Date AAPL.ret Weekday Thursday
1 2001-01-04 0.000000000星期四1 2 2001-01-04 0.000000000星期四1 3 2001-01-04 -0.025317808 Thursday 1 4 2001-01-04 0.014545711 Thursday 1 5 2001-01-04 0.007194276 Thursday 1 6 2001-01-04 -0.007194276 Thursday 1 7 2001-01-05 -0.0278569545星期五0 8 2001-01-05 0.0056338177星期五0 9 2001-01-05 0.0037383221 Friday 0 10 2001-01-05 0.0000000000星期五0 11 2002-02-25 3.511856e-03 Monday 0 12 2002-02-25 -3.511856e-03星期一0 13 2002-02-25 -4.398505e-04 Monday 0 14 2002-02-25 -2.643173e-03 Monday 0 15 2002-02-25 4.401416e-03星期一0 16 2002-02-26 9.189066e-03星期二0 17 2002-02-26 -8.243166e-04周二0 18 2002-02-26 9.533751e-03星期二0 19 2002-02-26 4.527688e-03周二0 20 2002-02-26 4.105933e-04星期二0 ............. 100 2002-03-01 8.717651e-03星期五0 101 2002-03-01 1.990115e-02星期五0 102 2002-03-01 -1.344387e-03星期五0 103 2002-03-01 -1.445373e-02星期五0 “) 我需要的输出应该是这样的:
Date AAPL.ret Weekday Thursday
1 2001-01-04 0.000000000星期四1 2 2001-01-04 0.000000000星期四1 3 2001-01-04 -0.025317808 Thursday 1 4 2001-01-04 0.014545711 Thursday 1 5 2001-01-04 0.007194276 Thursday 1 6 2001-01-04 -0.007194276 Thursday 1 7 2001-01-05 0.0056338177星期五0 8 2001-01-05 0.0037383221 Friday 0 9 2001-01-05 0.0000000000星期五0 11 2002-02-25 -3.511856e-03星期一0 12 2002-02-25 -4.398505e-04星期一0 13 2002-02-25 -2.643173e-03 Monday 0 14 2002-02-25 4.401416e-03星期一0 15 2002-02-26 -8.243166e-04星期二0 16 2002-02-26 9.533751e-03星期二0 17 2002-02-26 4.527688e-03星期二0 18 2002-02-26 4.105933e-04星期二0 ............. 100 2002-03-01 1.990115e-02星期五0 101 2002-03-01 -1.344387e-03星期五0 102 2002-03-01 -1.445373e-02 Friday 0
提前谢谢你。对不起,如果我错误地问了这个问题。这是我第一次在这里提问;我尽力遵守规则;特别是桌子应该如何出现。
我相信,我尝试过的代码与我想要的答案相差甚远。只计算和分组;下面。 表(ret.df $平日== “周四”) R1的百分比抑制率!(ret.df $平日== “星期四”),] -ret.df
我希望我的问题现在不那么模糊了。
上一个答案的后续跟进:
ret_1ON<- ret.df[duplicated(ret.df$Date)|1:nrow(ret.df)==1,]
暗淡(ret_1ON)
[1] 98734 4
head(ret_1ON)
Date AAPL.ret Weekday Thursday
1 2001-01-04 0.000000000星期四1 2 2001-01-04 0.000000000星期四1 3 2001-01-04 -0.025317808 Thursday 1 4 2001-01-04 0.014545711 Thursday 1 5 2001-01-04 0.007194276 Thursday 1 6 2001-01-04 -0.007194276 Thursday 1
tail(ret_1ON)
Date AAPL.ret Weekday Thursday
99994 2006-01-19 0.0013771520 Thursday 1 99995 2006-01-19 -0.0007321584 Thursday 1 99996 2006-01-19 -0.0029026141星期四1 99997 2006-01-19 -0.0002511616星期四1 99998 2006-01-19 0.0011297309星期四1 99999 2006-01-19 -0.0002509410 Thursday 1
我在徘徊为什么尾巴中的最后一项不是98734而是99999?
dim(ret.df)
[1] 99999 4 但这意味着条件已经实现。
答案 0 :(得分:0)
我们可以使用data.table
library(data.table)
setDT(mydata)[, .SD[(seq_len(.N) != 1)], Date]
如果我们想保留数据集的第一行
setDT(mydata)[, .SD[(seq_len(.N) != 1)|seq_len(.N)==.I[1]], Date]
或dplyr
library(dplyr)
mydata %>%
group_by(Date) %>%
filter(row_number() != 1)
如果“日期”列为base R
,则使用order
mydata[duplicated(mydata$Date),]
或包含第一行
mydata[duplicated(mydata$Date)|1:nrow(mydata)==1,]