从数据框中删除行但保留rownames

时间:2013-06-12 14:40:14

标签: r

我正在使用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

所以删除了rownames,如何获得前1000个值并保留rowname,日期?

我也试过

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

但这也行不通。

2 个答案:

答案 0 :(得分:5)

如果您想使用"["功能,可以使用:

sp500ret[seq(1000), , FALSE]

FALSEdrop参数的参数。默认值为TRUE,但这会将单列数据帧转换为向量。因此行名称将丢失。如果指定FALSE,您将收到包含原始行名称的数据框。

答案 1 :(得分: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)