每 count/list 天后删除下一行;在 R
Delete next row after every count/list of day; in R
我发现很难理解这个问题:
在下面的数据框中,我想在每个 count/list 之后删除下一行,比如星期四,星期五相同,依此类推。我宁愿不使用循环,因为数据很大。
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 星期四 1
4 2001-01-04 0.014545711 星期四 1
5 2001-01-04 0.007194276 星期四 1
6 2001-01-04 -0.007194276 星期四 1
7 2001-01-05 -0.0278569545 星期五 0
8 2001-01-05 0.0056338177 星期五 0
9 2001-01-05 0.0037383221 星期五 0
10 2001-01-05 0.0000000000 星期五 0
11 2002-02-25 3.511856e-03 星期一 0
12 2002-02-25 -3.511856e-03 星期一 0
13 2002-02-25 -4.398505e-04 星期一 0
14 2002-02-25 -2.643173e-03 星期一 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 星期四 1
4 2001-01-04 0.014545711 星期四 1
5 2001-01-04 0.007194276 星期四 1
6 2001-01-04 -0.007194276 星期四 1
7 2001-01-05 0.0056338177 星期五 0
8 2001-01-05 0.0037383221 星期五 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 星期一 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 星期五 0
提前谢谢你。对不起,如果我错误地问了这个问题。这是我第一次在这里提问;我已尽力遵守规则;特别是 table 应该如何显示。
我试过的代码,我相信,离我想要的答案真的很远。只是计数和子集;以下。
table(ret.df$平日=="Thursday")
r1<-ret.df[!(ret.df$Weekday=="Thursday"),]
我希望我的问题现在不那么模糊了。
上一个回答的跟进:
根据 ret_1ON
中的条件删除行
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 星期四 1
4 2001-01-04 0.014545711 星期四 1
5 2001-01-04 0.007194276 星期四 1
6 2001-01-04 -0.007194276 星期四 1
tail(ret_1ON)
Date AAPL.ret Weekday Thursday
99994 2006-01-19 0.0013771520 星期四 1
99995 2006-01-19 -0.0007321584 星期四 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 星期四 1
我在想为什么尾部的最后一项不是 98734 而是 99999?
dim(ret.df)
[1] 99999 4
不过,这意味着该条件已生效。
我们可以用 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
,如果 'Date' 列是 order
ed
mydata[duplicated(mydata$Date),]
或包括第一行
mydata[duplicated(mydata$Date)|1:nrow(mydata)==1,]
我发现很难理解这个问题: 在下面的数据框中,我想在每个 count/list 之后删除下一行,比如星期四,星期五相同,依此类推。我宁愿不使用循环,因为数据很大。
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 星期四 1 4 2001-01-04 0.014545711 星期四 1 5 2001-01-04 0.007194276 星期四 1 6 2001-01-04 -0.007194276 星期四 1 7 2001-01-05 -0.0278569545 星期五 0 8 2001-01-05 0.0056338177 星期五 0 9 2001-01-05 0.0037383221 星期五 0 10 2001-01-05 0.0000000000 星期五 0 11 2002-02-25 3.511856e-03 星期一 0 12 2002-02-25 -3.511856e-03 星期一 0 13 2002-02-25 -4.398505e-04 星期一 0 14 2002-02-25 -2.643173e-03 星期一 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 星期四 1 4 2001-01-04 0.014545711 星期四 1 5 2001-01-04 0.007194276 星期四 1 6 2001-01-04 -0.007194276 星期四 1 7 2001-01-05 0.0056338177 星期五 0 8 2001-01-05 0.0037383221 星期五 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 星期一 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 星期五 0
提前谢谢你。对不起,如果我错误地问了这个问题。这是我第一次在这里提问;我已尽力遵守规则;特别是 table 应该如何显示。
我试过的代码,我相信,离我想要的答案真的很远。只是计数和子集;以下。 table(ret.df$平日=="Thursday") r1<-ret.df[!(ret.df$Weekday=="Thursday"),]
我希望我的问题现在不那么模糊了。
上一个回答的跟进:
根据 ret_1ON
中的条件删除行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 星期四 1 4 2001-01-04 0.014545711 星期四 1 5 2001-01-04 0.007194276 星期四 1 6 2001-01-04 -0.007194276 星期四 1
tail(ret_1ON)
Date AAPL.ret Weekday Thursday
99994 2006-01-19 0.0013771520 星期四 1 99995 2006-01-19 -0.0007321584 星期四 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 星期四 1
我在想为什么尾部的最后一项不是 98734 而是 99999?
dim(ret.df)
[1] 99999 4 不过,这意味着该条件已生效。
我们可以用 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
,如果 'Date' 列是 order
ed
mydata[duplicated(mydata$Date),]
或包括第一行
mydata[duplicated(mydata$Date)|1:nrow(mydata)==1,]