如何按第二列对R双列进行排序,同时又能保留parings?

问题描述 投票:1回答:1

我有一个double,其中第一列是课程名称,第二列是lambda值(这些是惩罚性回归模型的系数)。我的double有几千行,大部分lambda值都是零。然而,有几个非零值。我怎样才能过滤这个双倍值,使其只保留非零系数?我的方法是这样的。

要查看交叉验证误差最小的系数:

course_coef1 <- as.matrix(coef(lasso_reg, lasso_reg$lambda.min))

head(course_coef1)
                    1
(Intercept) 0.4170463
PHYS 1116   0.0000000
VISST 2511  0.0000000
MATH 1920   0.0000000
PHIL 1110   0.0000000
FREN 1220   0.0000000

当我这样做的时候,我删除了双数的左列,我不想这样做。我希望能够看到系数所指的课程以及

non_zero <-  course_coef1[course_coef1[,1] != 0]

non_zero
 [1]  4.170463e-01  1.186766e-02  1.022153e-02 -1.728692e-02 -1.267802e-02  2.953045e-02 -7.366728e-04 -6.825617e-02  2.581637e-02  1.030888e-01
[11] -6.815507e-02 -6.177919e-04  3.138149e-02  1.297283e-05  7.753567e-02 -1.562090e-01 -2.301548e-01 -2.635691e-02 -1.382577e-02  1.487066e-02
[21] -3.922772e-04 -2.267470e-02 -2.668698e-02  3.372374e-02  2.309662e-02  4.383800e-02  8.291964e-03  2.643610e-04 -2.237277e-03 -3.068006e-04
r sorting double glmnet
1个回答
1
投票

两个问题。

  1. 你是抓列,既然省略了逗号,那就试一试 [... != 0,] (加逗号)。
  2. 可能是从矩阵到向量,用以下方法修复 ,drop=FALSE.
z <- as.matrix(coef(lm(mpg~disp+factor(cyl), data=mtcars)))
z
#                     [,1]
# (Intercept)  29.53476781
# disp         -0.02730864
# factor(cyl)6 -4.78584624
# factor(cyl)8 -4.79208587

z[z[,1] < 0]
# [1] -0.02730864 -4.78584624 -4.79208587
z[z[,1] < 0,]
#         disp factor(cyl)6 factor(cyl)8 
#  -0.02730864  -4.78584624  -4.79208587 
z[z[,1] < 0,, drop = FALSE]
#                     [,1]
# disp         -0.02730864
# factor(cyl)6 -4.78584624
# factor(cyl)8 -4.79208587
© www.soinside.com 2019 - 2024. All rights reserved.