2013-06-12 5 views
2

Я использую данные пакета rugarch:Удаление строк из dataframe но держать rownames

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])),] 

, но это также не работает.

+0

Извините, я сделал опечатку. –

+0

@JeremyMiles без проблем, добро пожаловать –

+0

@gung вы можете перенести его! –

ответ

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) –

+0

Более элегантный, чем мой. (Я не знал о строке(). Вы должны добавить его в качестве ответа. –

5

Если вы хотите использовать функцию "[", вы можете использовать:

sp500ret[seq(1000), , FALSE] 

FALSE является аргументом для параметра drop. Значение по умолчанию - TRUE, но это преобразует кадр данных с одним столбцом в вектор. Следовательно, имена строк будут потеряны. Если вы укажете FALSE, вы получите кадр данных с именами исходных строк.