将字符串附加到某些行

时间:2016-01-25 11:40:45

标签: r string string-concatenation sqldf

在我的数据框中,我的一个列(类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,我只是尝试了一种方法。

3 个答案:

答案 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")