使用多个逻辑运算符 R 对数据帧进行子集化

Subset a dataframe with multipe logical operators R

我有一个数据框,我想根据 2 个特定列中的值将其子集化或拆分为 3 个新数据框。

dataframe数据如下

structure(list(Analyte = c("Fe", "SiO2", "Al2O3", "Mn", "P"), 
    Units = c("%", "%", "%", "%", "%"), Value = c("65.64", "1.131", 
    "0.845", "0.02", "0.122"), `1 SD` = c("0.218585", "0.037177", 
    "0.022415", "0.002315", "0.001914"), `1 SD within Lab` = c("0.171935", 
    "0.022832", "0.01248", "0.000866", "0.001005"), Interval = c("0.113", 
    "0.023", "0.014", "0.002", "0.001"), `95% Lower CI` = c("65.5275075004927", 
    "1.10799350503001", "0.831047973875986", "0.017751684702168", 
    "0.120781663382338"), `95% Upper CI` = c("65.752959166174", 
    "1.15385316163666", "0.859832026124014", "0.0212631301126469", 
    "0.123288336617662"), `Coeff of Var` = c("0.3", "3.3", "2.7", 
    "11.6", "1.6"), `Number of Labs` = c("10", "10", "10", "9", 
    "10"), `Number of Analysis` = c("60", "60", "60", "54", "60"
    )), row.names = c(NA, 5L), class = "data.frame")

我希望我的三个 table 获得“认证”,'Provisional' 和 'informational'

认证 table 是指 'Coeff of Var' >= 10 且实验室数量 >=5 临时 table 是当 'Coeff of Var' 介于 10 和 20 之间或 'Number of Labs' 是 <5 和 >3 信息性 table 本质上是其他一切,但我制定了规则

我有 3 个小代码块,如下所示,但它们要么没有产生结果,要么产生错误的结果

Certified <- subset(df,
                    'Coeff of Var' <= 10 &
                    'Number of Labs' >= 5)

Provisional <- subset(df,
                       'Coeff of Var' < 20 & 
                          'Coeff of Var' > 10 |
                          'Number of Labs' < 5)


Informational <- subset(df,
                        'Coeff of Var' > 20 | 
                        'Number of Labs' < 3)

我曾尝试使用“&&”代替“&”,但没有成功。 我哪里做错了?

数据框中的所有数字都是字符类型。我们可以用type.convert将其改成各自的类型

此外,不建议列名中包含空格,但如果有,可以使用反引号而不是引号引用它们。如果我们用引号引用它们,它会将字符串值与数字进行比较。所以试试 :

df <- type.convert(df, as.is = TRUE)

Certified <- subset(df,`Coeff of Var` <= 10 & `Number of Labs` >= 5)
Provisional <- subset(df,`Coeff of Var` < 20 & `Coeff of Var` > 10 | `Number of Labs` < 5)
Informational <- subset(df, `Coeff of Var` > 20 | `Number of Labs` < 3)