簡體   English   中英

R sqldf - match.fun(asfn)'c(“as.labelled”,“as.integer”)'不是函數,字符或符號

[英]R sqldf - match.fun(asfn) 'c(“as.labelled”, “as.integer”)' is not a function, character or symbol

R的總新手,剛剛花了幾個小時玩,並且認為我可以玩一些NHANES數據集,例如ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/nhanes/2003-2004/

所以抓住了一對,在玩了一次merge(bmx_c, demo_c)和一個快速的谷歌后,我認為sqldf庫是一種更有效的方法來合並/提取文件中的幾個列,玩,但我已經遇到了問題。

Error in match.fun(asfn) : 
  'c("as.labelled", "as.integer")' is not a function, character or symbol**

NHANES文件采用SAS格式,因此我不得不:

install.packages("Hmisc")
install.packages("sqldf")

library(Hmisc)
library(sqldf)

demo_c <- sasxport.get("DEMO_C.XPT")
bmx_c <- sasxport.get("BMX_C.XPT")

is.data.frame(demo_c)
[1] TRUE

sqldf("select seqn from demo_c")
Error in match.fun(asfn) : 
  'c("as.labelled", "as.integer")' is not a function, character or symbol
>  

summary(demo_c$seqn)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  21000   23540   26070   26070   28600   31130 
> 

我猜一些類型轉換是必需的,但我不知道R的細微之處。

sqldf不支持Hmisc生成的"labelled"列類。 所有列似乎都是整數或數字,因此首先將列轉換為數字:

demo_c[] <- lapply(demo_c, as.numeric)
sqldf("select seqn from demo_c")

如果您願意,可以將整數1轉換為整數:

isInt <- sapply(demo_c, inherits, "integer")
demo_c[isInt] <- lapply(demo_c[isInt], as.integer)    
demo_c[!isInt] <- lapply(demo_c[!isInt], as.numeric)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM