【问题标题】:R susbet matching "ANY" (union)R 子集匹配“ANY”(联合)
【发布时间】:2020-06-01 02:48:34
【问题描述】:

我正在尝试从 mtcars 中进行子集化,以便行具有与存储在列表中的多个值中的任何一个匹配的特定列。

cylChoices = c(4,6)
subset(mtcars,cyl==cylChoices[1] | cyl== cylChoices[2])

但是,当 cylChoices 是任意长度时,我想这样做。

我已经通过 for 循环接近了这一点,但这会导致感觉像是不必要的长代码,例如:

cars = list()
cylChoices = c(4,6)
count = 1
for(tempChoice in cylChoices){
count =count+1
cars[[count]] = subset(mtcars,cyl==tempChoice)
}

这不会产生相同的结果,但它越来越接近。

有什么方法可以轻松匹配子集?

非常感谢您的宝贵时间!

【问题讨论】:

    标签: r subset


    【解决方案1】:

    我们可以使用%in% 运算符按照 OP 中的请求对数据进行子集化。

    cylChoices = c(4,6)
    subset(mtcars,cyl %in% cylChoices)
    

    ...以及输出的前几行:

                    mpg cyl  disp  hp drat    wt  qsec vs am gear carb
    Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
    Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
    Datsun 710     22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
    Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
    Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
    Merc 240D      24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
    Merc 230       22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
    Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
    Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
    

    `%in% 也可以与提取运算符一起使用,例如:

    mtcars[mtcars$cyl %in% cylChoices,]
    

    【讨论】:

    • 非常感谢您的帮助!您的解决方案完美运行,非常感谢您的帮助。
    • @rgf98 - 谢谢,如果答案对您有用,请接受。
    【解决方案2】:

    filter 的选项

    library(dplyr)
    mtcars %>%
         filter(cyl %in% cylChoices)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      • 2015-09-16
      • 1970-01-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多