【问题标题】:Subset a dataframe with multipe logical operators R使用多个逻辑运算符 R 子集数据帧
【发布时间】:2020-10-18 01:29:52
【问题描述】:

我有一个数据框,我想根据 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")

我希望我的三个表是“认证的”、“临时的”和“信息的”

认证表是指“Var 系数”>= 10 且实验室数量 >=5 临时表是“Var 系数”在 10 到 20 之间或“实验室数量”3 时 信息表基本上是其他一切,但我已经制定了规则

我有 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)

我尝试使用 '&&' 代替 '&' 但没有成功。 我哪里出错了?

【问题讨论】:

    标签: r subset logical-operators


    【解决方案1】:

    数据框中的所有数字都是字符类型。我们可以使用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)
    

    【讨论】:

    • 谢谢。我以为我已将 df 转换为数字,但您的方式似乎效果更好。关于我同意的空间,这有点事后考虑,但我会改变它。
    猜你喜欢
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多