【问题标题】:Append string to some rows将字符串附加到某些行
【发布时间】:2016-05-01 17:02:50
【问题描述】:

在我的数据框中,我的一列(character 类)的条目长度为 5 或 9 个字符。我想取那些 5 个字符长的,并在后面附加 4 个零以使它们长 9 个字符。 (EG转12345 in 123450000

我尝试使用sqldf 和以下代码:

mydf<-sqldf("UPDATE mydf SET column = column + '0000' WHERE LENGTH(column) < 6")

但由于某种原因,它将mydf 变成了null 值,我认为问题在于连接。

也试过concat(),但我明白了:

sqliteSendQuery(con, statement, bind.data) 中的错误: 语句中的错误:没有这样的功能:concat`。

注意:答案不一定必须使用 sqldf,我只是给出了一种我尝试这样做的方法。

【问题讨论】:

  • 请在问题中添加适当的标签,以便每个人都能理解
  • 可能是mydf$column=ifelse(nchar(mydf$column)&lt;6,paste0(mydf$column,'0000'),mydf$column)
  • 工作,非常感谢! (如果你愿意,你可以把它放在答案中,我会接受它)。顺便说一句,如果有人知道为什么我对 sqldf 的尝试没有奏效,我很好奇 :)
  • 您还可以使用stringr 包来获得“更清洁”的解决方案。 str_pad(mydf$column, 9, side = "right").

标签: r string string-concatenation sqldf


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    你可以试试ifelse

    mydf$column=ifelse(nchar(mydf$column)&lt;6,paste0(mydf$column,'0000'),mydf$column)‌​

    【讨论】:

      【解决方案3】:

      而不是更新使用选择语句。

      sqldf("select *, column||'0000' from mydf where length(column)<6")
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-06-10
        • 1970-01-01
        • 1970-01-01
        • 2022-08-07
        • 2023-03-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多