在我的数据框中,我的一个列(类character
)的条目长度为5或9个字符。我想拍摄长度为5个字符的人,并在后面添加4个零,使它们长9个字符。 (EG转12345
中的123450000
}
我尝试使用sqldf
和以下代码执行此操作:
mydf<-sqldf("UPDATE mydf SET column = column + '0000' WHERE LENGTH(column) < 6")
但出于某种原因,它将mydf
变为null
值,我认为问题在于连接。
还尝试了concat()
,但我得到了:
sqliteSendQuery(con,statement,bind.data)中的错误: 声明中的错误:没有这样的功能:concat`。
NB :回答并不一定要使用sqldf,我只是尝试了一种方法。
答案 0 :(得分:3)
sqldf 不更新R对象,我们需要在更新后从 sql环境返回结果,请参见下面的示例:
library(sqldf)
#dummy data
mydf <- data.frame(column=c("1","100","12345","1234567"))
#update and return the result
mydf1 <- sqldf(c("UPDATE mydf
SET column = column || '0000'
WHERE LENGTH(column) < 6",
"SELECT *
FROM main.mydf"))
#output
mydf1
# column
# 1 10000
# 2 1000000
# 3 123450000
# 4 1234567
答案 1 :(得分:1)
您可以尝试ifelse
mydf$column=ifelse(nchar(mydf$column)<6,paste0(mydf$column,'0000'),mydf$column)
答案 2 :(得分:1)
而不是更新使用select语句。
sqldf("select *, column||'0000' from mydf where length(column)<6")