以下代码对数据框进行子集化,但在子集中包含行名:
mpg = subset(mtcars, cyl=='6', select=mpg)
如何将生成的 mpg 对象转换为仅包含值的向量?换句话说,我需要从生成的 mpg 对象中删除行名
你有很多选择。
首先,由于您使用的是subset
,您可以指定参数drop=TRUE
,但请参阅此答案后面的警告):
subset(mtcars, cyl=='6', select=mpg, drop=TRUE)
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
但从长远来看,您应该熟悉 R 子集运算符[
、[[
和$
:
mtcars[mtcars$cyl==6, "mpg"]
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
您可以使用该函数简化最后一行代码with
(但是,请再次查看警告):
with(mtcars, mtcars[cyl==6, "mpg"])
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
警告:某些方面subset
和with
可能被认为是有害的。首先在数据框的上下文中评估所有对象。因此,如果您碰巧使用了与数据框中的列同名的变量,您的表达式将计算为列名,而不是您的变量:
with(mtcars,mtcars[cyl==6,"mpg"])
[1] 21.0 21.0 21.4 18.1 19.2 17.8 19.7
gear <- 6
with(mtcars,mtcars[cyl==gear,"mpg"])
[1] 22.8 24.4 22.8 32.4 30.4 33.9 27.3 21.4
subset(mtcars, cyl==gear, select=mpg, drop=TRUE)
[1] 22.8 24.4 22.8 32.4 30.4 33.9 27.3 21.4
with
andsubset
调用来自数据框,而gear
不是来自您将其设置为 6 的位置。