从数据框中删除行但保留行名称

3

我正在使用rugarch软件包的数据:

  library(rugarch)
  data(sp500ret)

数据长这样:
head(sp500ret)
               SP500RET
1987-03-10  0.008840447
1987-03-11 -0.001892734
1987-03-12  0.003129678
1987-03-13 -0.004577455
1987-03-16 -0.005742768
1987-03-17  0.014603325

我只需要前1000个数值,所以我尝试了:
sp500retmod<-sp500ret[-c(1001:length(sp500ret[,1])),1]

但这会带来

head(sp500retmod)

[1]  0.008840447 -0.001892734  0.003129678 -0.004577455 -0.005742768
[6]  0.014603325

如何在删除行名的情况下获取前1000个值并保留行名(日期)?

我也尝试过:

sp500retmod<-sp500ret[-c(1001:length(sp500ret[,1])),] 

但是这也不起作用。

抱歉,我打错字了。 - Jeremy Miles
@gung 你可以迁移它! - Testifier
2个回答

7

如果想使用"["函数,可以使用以下方法:

sp500ret[seq(1000), , FALSE]
FALSEdrop 参数的一个参数。默认值是 TRUE,但这会将单列数据框转换为向量。因此,行名称将丢失。如果您指定 FALSE,则将收到带有原始行名称的数据框。

1

我认为这两种写法都可以:

d1 <- head(sp500ret, n=1000L)
rownames(d1)

d2 <- subset(sp500ret, c(1:length(SP500RET)) < 1001)
rownames(d2)

# Solution from @Penguin_Knight
d3 <- subset(sp500ret, row(sp500ret) < 1001)
rownames(d3)

2
我还有另一个可行的版本:d3 <- subset(sp500ret, row(sp500ret) < 1001) - Penguin_Knight
比我的更优雅。 (我不知道row()。您应该将其添加为答案。) - Jeremy Miles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接