gpt4 book ai didi

r - 如何获取按名称暂时删除列的数据框?

转载 作者:行者123 更新时间:2023-12-03 01:29:50 25 4
gpt4 key购买 nike

例如,使用数据集mtcars

mtcars[ , "cyl"]

mtcars[ , 2]

两者都给了我相同的专栏。所以,因为我可以获得除第 2 列以外的所有内容,如下所示:

mtcars[ , -2]

我没想到会这样:

mtcars[ , -"cyl"]
Error in -"cyl" : invalid argument to unary operator

我能想到的最好的办法是:

mtcars[ , !colnames(mtcars)=="cyl"]

有更简单的解决方案吗?

编辑:如果前两种技术有效,那么后两种技术也应该有效,这似乎是合乎逻辑的。我希望我错过了一些东西。 ?"["?subset 的帮助页面没有解释这个违反直觉的结果。有谁知道这是为什么吗?

最佳答案

[编辑:]负字符串索引不起作用的解释:

-() 是一个函数,R 开发人员表示它不能用于字符向量(不仅仅是因为否定字符串没有意义)。由于无法对字符向量取反,因此无法提供负字符串来删除列。问题出在 - 上,并且是您引用的错误消息的来源。因此,负索引仅适用于数字的规则。原始错误的来源是:

> -"cyl"
Error in -"cyl" : invalid argument to unary operator

请注意,在问题的评论中,有人混淆了 "cyl" 的否定版本是 "-cyl",但事实并非如此,它只是另一个字符串。上面的 R 代码片段显示了问题中尝试的子集设置中发生的情况。

Section 2.7An Introduction to R”手册描述了允许的子集化方法。

[原文:]删除组件的最简单方法就是将该组件设置为 NULL:

> cars <- mtcars
> cars[, "cyl"] <- NULL ## or cars$cyl <- NULL
> names(cars)
[1] "mpg" "disp" "hp" "drat" "wt" "qsec" "vs" "am" "gear" "carb"

[编辑:]鉴于对 Q 的编辑表明需要临时删除指定列,则:

subset(mtcars, select = -cyl)

mtcars[, !names(mtcars) %in% "cyl"]

都是选项,前者比后者干净。

关于r - 如何获取按名称暂时删除列的数据框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4835342/

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