将字符串附加到某些行
Append string to some rows
在我的数据框中,我的一列(class character
)的条目长度为 5 或 9 个字符。我想取那些长度为 5 个字符的,并在后面附加 4 个零,使它们长度为 9 个字符。 (EG在123450000
转12345
)
我尝试使用 sqldf
和以下代码来做到这一点:
mydf<-sqldf("UPDATE mydf SET column = column + '0000' WHERE LENGTH(column) < 6")
但由于某种原因,它将 mydf
变成了 null
值,我认为问题在于串联。
也试过 concat()
,但我得到:
Error in sqliteSendQuery(con, statement, bind.data) :
error in statement: no such function: concat`.
注意:答案不一定要使用 sqldf,我只是给出了一种我尝试过的方法。
您可以简单地尝试 ifelse
mydf$column=ifelse(nchar(mydf$column)<6,paste0(mydf$column,'0000'),mydf$column)
而不是更新使用 select 语句。
sqldf("select *, column||'0000' from mydf where length(column)<6")
sqldf 不更新 R 对象,我们需要 return 来自 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
在我的数据框中,我的一列(class character
)的条目长度为 5 或 9 个字符。我想取那些长度为 5 个字符的,并在后面附加 4 个零,使它们长度为 9 个字符。 (EG在123450000
转12345
)
我尝试使用 sqldf
和以下代码来做到这一点:
mydf<-sqldf("UPDATE mydf SET column = column + '0000' WHERE LENGTH(column) < 6")
但由于某种原因,它将 mydf
变成了 null
值,我认为问题在于串联。
也试过 concat()
,但我得到:
Error in sqliteSendQuery(con, statement, bind.data) : error in statement: no such function: concat`.
注意:答案不一定要使用 sqldf,我只是给出了一种我尝试过的方法。
您可以简单地尝试 ifelse
mydf$column=ifelse(nchar(mydf$column)<6,paste0(mydf$column,'0000'),mydf$column)
而不是更新使用 select 语句。
sqldf("select *, column||'0000' from mydf where length(column)<6")
sqldf 不更新 R 对象,我们需要 return 来自 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