如何在NA
中使用RODBC
数据库语言时替换R
个项目?
我经常搜索,但似乎没有COALESCE
或IFNULL
函数,我也试过CASE
运算符,但没有运气!
这是我的查询。在结果中,我想使用类似Not Captured
的字符串而不是<NA>
:
sql <- "SELECT PRODUCT_LINE, COUNT(*) AS MMR_Count,
ROUND((COUNT(*)*100/(SELECT COUNT(MMR_NBR) FROM hist_mmr)),2) AS per
FROM hist_MMR
GROUP BY PRODUCT_LINE
ORDER BY COUNT(PRODUCT_LINE) DESC"
df <- sqlQuery( db , sql)
head(df,10)
结果:
PRODUCT_LINE MMR_Count per
1 SECURITY 688 43.60
2 PLUMBING 320 20.28
3 HARDWARE 80 5.07
4 <NA> 490 31.05
期望的结果:
PRODUCT_LINE MMR_Count per
PRODUCT_LINE MMR_Count per
1 SECURITY 688 43.60
2 PLUMBING 320 20.28
3 HARDWARE 80 5.07
4 Not Captured 490 31.05
答案 0 :(得分:0)
当连接到SQL Server,PostgreSQL和SQLite时,这适用于我。当然,它没有使用RODBC
,但我怀疑你的需求更多是以SQL为中心而不是RODBC
特定的。
dbGetQuery(con, "select (case when 1=2 then 'a' else 'b' end) as a")
# a
# 1 b
所以在你的情况下,我怀疑这可行(未经测试):
sql <- "
SELECT
(case when PRODUCT_LINE is null then 'No Captured' else PRODUCT_LINE end),
COUNT(*) AS MMR_Count,
ROUND((COUNT(*)*100/(SELECT COUNT(MMR_NBR) FROM hist_mmr)),2) AS per
FROM hist_MMR
GROUP BY PRODUCT_LINE
ORDER BY COUNT(PRODUCT_LINE) DESC
"
(为了记录,我使用DBI
RSQLServer
,RPostgres
和RSQLite
来使用{{3}}。)
你也可以用R来解决这个问题:
df$PRODUCT_LINE[is.na(df$PRODUCT_LINE)] <- "Not Captured"