gpt4 book ai didi

r - 尝试对数据帧进行子集化

转载 作者:行者123 更新时间:2023-12-04 10:44:09 27 4
gpt4 key购买 nike

使用 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

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

最佳答案

它将数字转换为 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

逼到 integer?Extract 中提到

i, j - indices specifying elements to extract or replace. Indices are numeric or character vectors or empty (missing) or NULL. Numeric values are coerced to integer as by as.integer (and hence truncated towards zero).



即它会通过删除从“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)]) 

关于r - 尝试对数据帧进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59793596/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com