【问题标题】:removing a list of columns from a data.frame using subset [duplicate]使用子集从data.frame中删除列列表[重复]
【发布时间】:2012-04-08 09:50:46
【问题描述】:

我经常需要从 data.frame 中删除列列表。

我通常这样做:

to.remove <- c("hp","drat","wt","qsec")
mtcars[,-which(names(mtcars) %in% to.remove)]

效果很好。

但我希望能够使用subset 以更简洁的方式执行此操作。但它似乎附加了 data.frame,然后将列名作为变量而不是字符串访问。

例如,这是我希望能够做到的:

subset(mtcars,select=-to.remove)

有没有办法强制subsetselect 语句中使用字符串向量?还是有其他更好的选择?

【问题讨论】:

    标签: r dataframe


    【解决方案1】:

    我可能会这样做:

    to.remove <- c("hp","drat","wt","qsec")
    `%ni%` <- Negate(`%in%`)
    subset(mtcars,select = names(mtcars) %ni% to.remove)
    

    (我经常使用%ni%,所以我已经将它内置到我的 .Rprofile 中了。)

    【讨论】:

    • 很好地使用用 negate +1 创建的二元运算符
    • @TylerRinker 我不记得我是从哪里获得该功能的了。必须是 SO 或 r-help。
    • 了解 Negate 非常酷。我很少用funprog里的东西,这个用处很大。
    • +1, Negate 看起来像一个非常有用的隐藏宝石,%ni% 也是如此。而你的下一个任务是用……鲱鱼砍伐森林中最强大的树!
    • 为了完整起见,您还可以使用! 运算符,例如:mtcars[,!(names(mtcars) %in% to.remove)]
    【解决方案2】:

    您当然可以使用 select,但您必须传入名称,而不是字符。所以这会起作用:

    subset( mtcars, select = -c(hp, drat, wt, qsec) )
    

    【讨论】:

    • 我想创建一个名称向量并发送到选择。但这不起作用:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2019-10-03
    • 1970-01-01
    • 2016-05-30
    • 1970-01-01
    • 2017-05-13
    相关资源
    最近更新 更多