选择不包含任何负值或缺失值的行

Posted

技术标签:

【中文标题】选择不包含任何负值或缺失值的行【英文标题】:Select Rows That Does Not Contain any Negative Or Missing Value 【发布时间】:2021-12-31 00:56:39 【问题描述】:

假设一个数据库表有几百列。在 SQL 语句中,您将如何/记录?你可以为 R 用户使用 sqldf 包吗?

这里是一个 6 行 2 列的数据框示例:

D = data.frame(X = c(23, -24, 35, 12, 34, 41), 
               Y = c(100, 98, 89, NA, 56, 90))

SQL 语句应该只返回一个包含第 1、3、5 和 6 行的表。

【问题讨论】:

sqldf::sqldf('select * from D where X>=0 and Y>=0') 【参考方案1】:
text = "X Y
23  100
-24 98
35  89
12  NA
34  56
41  90"
df = read.table(text=text, header = T)
# install.packages("sqldf")
library(sqldf)

conditions = c(">=0","NOT NULL")

columns = colnames(df)

applyConditions <- function(columns,conditions)
  grid = expand.grid(columns,conditions)
  apply(grid, 1, 
   function(x) paste(x, collapse = " ")
  )
  

select <- "SELECT * FROM df where "
where <- paste(applyConditions(columns,conditions),collapse = " AND ")

sqldf(paste(select,where))

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。 这是杰作!谢谢卡马乔先生! 这个可以写成where &lt;- paste(outer(names(df), c("&gt;=0","NOT NULL"), paste), collapse = " AND "); fn$sqldf("select * from df where $where") 伟大的补充!谢谢GG。

以上是关于选择不包含任何负值或缺失值的行的主要内容,如果未能解决你的问题,请参考以下文章

复制具有缺失值的行并使用向量替换缺失值

R语言删除包含缺失值的行并将字符数据列(character)转化为因子列(factor)实战

缺失值处理

在数据框的选定列中包含 NA(缺失)值的行子集

删除同一列或连续行的另一列中具有特定值和缺失值的行

多重插补为啥要汇总分析