代码之家  ›  专栏  ›  技术社区  ›  RobertF

如果列没有表头,如何在R数据帧中引用变量名?

  •  0
  • RobertF  · 技术社区  · 5 月前

    我在用 nearZeroVar 功能在 R 在我的分析数据集中识别零方差变量。

    我的代码示例:

    train1_nzv_y0 <- nearZeroVar(train1[train1$y=="no",], saveMetrics= TRUE)
    train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",]
               freqRatio percentUnique zeroVar  nzv
    x1                 0  0.0001649599    TRUE TRUE
    x2                 0  0.0001649599    TRUE TRUE
    x3                 0  0.0001649599    TRUE TRUE
    x4                 0  0.0001649599    TRUE TRUE
    

    生成数据帧后 train1_nzv_y0 ,我想提取一个已被标识为零方差变量的变量名x1-x4的列表。

    然而,变量名没有列标题——它们“浮动”在我的第一列(freqRatio)前面,但无法识别它们。

    有没有标准的技巧 R 用于引用缺少标题的虚列?

    1 回复  |  直到 5 月前
        1
  •  3
  •   Tim G    5 月前

    它们是行名,因此您可以使用 rownames() 要获取这些变量名:

    rownames(train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",])
    

    这将返回一个包含“x1”、“x2”、“x3”、“x4”的字符向量:

    代码

    #install.packages("caret")
    library(caret)
    
    # Create example dataset
    set.seed(123)
    train1 <- data.frame(
      y = sample(c("yes", "no"), 100, replace=TRUE),
      x1 = c(rep(0, 50), rep(NA, 50)),  # zero variance for "no" class
      x2 = c(rep(0, 50), rep(1, 50)),   # normal variance
      x3 = c(rep(0, 50), rep(NA, 50)),  # zero variance for "no" class
      x4 = 1:100                         # normal variance
    )
    
    train1_nzv_y0 <- nearZeroVar(train1[train1$y=="no",], saveMetrics= TRUE)
    train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",]    
    rownames(train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",])
    

    输出:

    > train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",]
       freqRatio percentUnique zeroVar  nzv
    y          0      2.325581    TRUE TRUE
    x1         0      2.325581    TRUE TRUE
    x3         0      2.325581    TRUE TRUE
    > 
    > rownames(train1_nzv_y0[train1_nzv_y0$zeroVar=="TRUE",])
    [1] "y"  "x1" "x3"