【问题标题】:Attempting to subset dataframe尝试对数据框进行子集化
【发布时间】:2023-03-22 11:54:01
【问题描述】:

使用 mtcars 数据框:

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

在学习子集(现在我知道如何正确使用索引或subset)时,我正在试验并使用代码

head(mtcars[,-mtcars$drat])
                   mpg drat    wt  qsec vs am gear carb
Mazda RX4         21.0 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7 3.15 3.440 17.02  0  0    3    2
Valiant           18.1 2.76 3.460 20.22  1  0    3    1

这个输出背后的逻辑是什么?

【问题讨论】:

    标签: r subset


    【解决方案1】:

    它将数字转换为integer 并将其用作删除列的索引

    as.integer(mtcars$drat)
    #[1] 3 3 3 3 3 2 3 3 3 3 3 3 3 3 2 3 3 4 4 4 3 2 3 3 3 4 4 3 4 3 3 4
    

    ?Extract 中提到了对integer 的强制

    i, j - 指定要提取或替换的元素的索引。索引是数字或字符向量或空(缺失)或 NULL。数值被 as.integer 强制转换为整数(因此被截断为零)。

    即它会通过删除从“drat”列获得的唯一列索引来给出相同的输出

    setdiff(seq_along(mtcars), as.integer(mtcars$drat))
    #[1]  1  5  6  7  8  9 10 11
    head(mtcars[setdiff(seq_along(mtcars), as.integer(mtcars$drat))])
    #                   mpg drat    wt  qsec vs am gear carb
    #Mazda RX4         21.0 3.90 2.620 16.46  0  1    4    4
    #Mazda RX4 Wag     21.0 3.90 2.875 17.02  0  1    4    4
    #Datsun 710        22.8 3.85 2.320 18.61  1  1    4    1
    #Hornet 4 Drive    21.4 3.08 3.215 19.44  1  0    3    1
    #Hornet Sportabout 18.7 3.15 3.440 17.02  0  0    3    2
    #Valiant           18.1 2.76 3.460 20.22  1  0    3    1
    

    但是,如果我们删除-,即根据索引选择列,那么它将复制列,因为某些索引(整数转换后重复)

    head(mtcars[as.integer(mtcars$drat)]) 
    

    【讨论】:

      猜你喜欢
      • 2019-09-29
      • 1970-01-01
      • 2013-08-15
      • 2021-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多