使用多个逻辑运算符 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)
我有一个数据框,我想根据 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)