gpt4 book ai didi

r - 如何从向量中删除多个值?

转载 作者:行者123 更新时间:2023-12-03 04:38:43 26 4
gpt4 key购买 nike

我有一个向量,例如:a = c(1:10),我需要删除多个值,例如:2, 3, 5

如何删除向量中的那些数字(它们不是向量中的位置)?

目前我循环向量并执行以下操作:

a[!a=NUMBER_TO_REMOVE]

但我认为有一个函数可以自动执行此操作。

最佳答案

%in% 运算符告诉您哪些元素属于要删除的数字:

> a <- sample (1 : 10)
> remove <- c (2, 3, 5)
> a
[1] 10 5 2 7 1 6 3 4 8 9
> a %in% remove
[1] FALSE TRUE TRUE FALSE FALSE FALSE TRUE FALSE FALSE FALSE
> a [! a %in% remove]
[1] 10 7 1 6 4 8 9

请注意,这也会默默地删除不可比较的内容(例如NAInf)(同时它将在a中保留重复的值,因为只要它们未在删除中列出即可)。

  • 如果a可以包含不可比较项,但remove则不能,我们可以使用match,告诉它返回 0 表示不匹配和不可比较(%in%match 的便捷快捷方式):

    > a <- c (a, NA, Inf)
    > a
    [1] 10 5 2 7 1 6 3 4 8 9 NA Inf
    > match (a, remove, nomatch = 0L, incomparables = 0L)
    [1] 0 3 1 0 0 0 2 0 0 0 0 0
    > a [match (a, remove, nomatch = 0L, incomparables = 0L) == 0L]
    [1] 10 7 1 6 4 8 9 NA Inf

    incomparables = 0 不是需要,因为 incomparables 无论如何都会不匹配,但为了可读性,我将其包含在内。
    顺便说一句,这就是 setdiff 内部所做的事情(但没有 unique 来丢弃 a 中不在 remove 中的重复项)。

  • 如果remove包含不​​可比较的内容,您必须单独检查它们,例如

    if (any (is.na (remove))) 
    a <- a [! is.na (a)]

    (这并不能区分 NANaN,但 R 手册无论如何警告人们不应该依赖它们之间的差异)

    对于 Inf/-Inf 你必须检查 signis.finite

关于r - 如何从向量中删除多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9665984/

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