【问题标题】:Select rows with logical TRUE using sqldf使用 sqldf 选择具有逻辑 TRUE 的行
【发布时间】:2026-02-14 14:10:01
【问题描述】:

我正在使用这个:

NewDf <- sqldf("select * from OldDf where Test = 'TRUE'")

但我在 NewDf 中得到零行。 OldDf 中肯定有 TRUE 行(Test 列是逻辑值:TRUEFALSE )。

有什么想法吗?

P.S.:这行得通:

NewDf  <- subset(OldDf, Test != 'FALSE')

【问题讨论】:

  • 你能提供dput(head(OldDf))的输出吗?所以我们可以测试?
  • 抱歉,由于数据量大且保密,这会很困难)-:
  • 我可以转换成文本吗?
  • 制作一个与真实数据具有相同结构的虚拟示例数据框。
  • 或许可以试试:sqldf("select * from OldDf where Test = 1")

标签: r subset logical-operators sqldf


【解决方案1】:

sqldf 将逻辑存储为 01 整数,请参见此示例:

# dummy data
OldDf <- head(mtcars[, 1:2])
OldDf$Test <- c(TRUE, FALSE)
OldDf
#                    mpg cyl  Test
# Mazda RX4         21.0   6  TRUE
# Mazda RX4 Wag     21.0   6 FALSE
# Datsun 710        22.8   4  TRUE
# Hornet 4 Drive    21.4   6 FALSE
# Hornet Sportabout 18.7   8  TRUE
# Valiant           18.1   6 FALSE

library(sqldf)

sqldf("select * from OldDf where Test = 1")
#    mpg cyl Test
# 1 21.0   6 TRUE
# 2 22.8   4 TRUE
# 3 18.7   8 TRUE

# This also works, to filter on TRUE
sqldf("select * from OldDf where Test")
#    mpg cyl Test
# 1 21.0   6 TRUE
# 2 22.8   4 TRUE
# 3 18.7   8 TRUE

# To get FALSE
sqldf("select * from OldDf where NOT Test")
#    mpg cyl  Test
# 1 21.0   6 FALSE
# 2 21.4   6 FALSE
# 3 18.1   6 FALSE

【讨论】: