从数据框中删除一行而不丢失R中的rownames

时间:2017-05-30 15:36:59

标签: r

我有以下数据框(rmse1):

> rmse1
                  matrix..
1                       NA
sGARCH - norm 0.0004717566
eGARCH - norm 0.0004522429
apARCH - norm 0.0004640376
sGARCH - std  0.0004173882
eGARCH - std  0.0004546693
apARCH - std  0.0004132033
sGARCH - ged  0.0004359045
eGARCH - ged  0.0004483274
apARCH - ged  0.0004247326

或以dput格式:

> dput(rmse1)
structure(list(matrix.. = c(NA, 0.0004717565532856, 0.000452242891965358, 
0.000464037577947331, 0.000417388230016878, 0.000454669306307564, 
0.00041320327280016, 0.00043590445999408, 0.00044832739721304, 
0.000424732596935747)), .Names = "matrix..", row.names = c("1", 
"sGARCH - norm", "eGARCH - norm", "apARCH - norm", "sGARCH - std", 
"eGARCH - std", "apARCH - std", "sGARCH - ged", "eGARCH - ged", 
"apARCH - ged"), class = "data.frame")

第一行是不需要的行(其中rowname是1:)

所以要删除它我输入以下代码:

rmse1<-rmse1[-1,]

但是,这次我放弃了数据框的rownames:

> rmse1
[1] 0.0004717566 0.0004522429 0.0004640376 0.0004173882 0.0004546693 0.0004132033 0.0004359045 0.0004483274 0.0004247326

如何在不丢失rownames的情况下删除第一行。

我会很高兴得到任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:2)

它之所以这样做是因为drop论证。

当您进行子集化时,该数组只有一个级别,[的默认值为drop = TRUE。为了抵消这种情况,我们需要指定drop = FALSE

rmse1[-1, , drop = FALSE]

                  matrix..
sGARCH - norm 0.0004717566
eGARCH - norm 0.0004522429
apARCH - norm 0.0004640376
sGARCH - std  0.0004173882
eGARCH - std  0.0004546693
apARCH - std  0.0004132033
sGARCH - ged  0.0004359045
eGARCH - ged  0.0004483274
apARCH - ged  0.0004247326

查看@hadley正在开发的strict包可能会有所帮助。它的一个好处是,一旦加载,如果未指定drop参数,它将抛出错误。