如果列中包含"-&引用;在一个值的末尾,删除“"-&引用;最后是-sqldf
我有一个如下所示的数据帧:如果列中包含"-&引用;在一个值的末尾,删除“"-&引用;最后是-sqldf,sql,r,sqldf,Sql,R,Sqldf,我有一个如下所示的数据帧: ColA ColB djdn- 3 dn-dn 5 ndmc- 8 nd-nd-md 9 预期产出: ColA ColB New_Col djdn- 3 djdn dn-dn 5 dn-dn ndmc- 8 ndmc nd-nd-md 9 nd-nd-md 使用sqldf,
ColA ColB
djdn- 3
dn-dn 5
ndmc- 8
nd-nd-md 9
预期产出:
ColA ColB New_Col
djdn- 3 djdn
dn-dn 5 dn-dn
ndmc- 8 ndmc
nd-nd-md 9 nd-nd-md
使用sqldf,我想删除值末尾的“-”,如果它在末尾存在的话
这是我尝试的代码:
library(sqldf)
df_new<- sqldf("select CASE(RIGHT([ColA], 1) = '-', LEFT([ColA], LEN([ColA])-1),
[ColA]) [New_Col] from df")
Error in result_create(conn@ptr, statement) : near "(": syntax error
库(sqldf)
df_new要匹配“value contains'-”结尾,请使用(我假设PostgreSQL)a:
选择
科鲁阿
来自df
其中(列a类似于“%-”)
然后,要获得不带最终字符的值(您现在知道它是“-”字符),请使用:
选择
左(列a,-1)列a列被截断
来自df
其中(列a类似于“%-”)
我想你在找rtrim
library(sqldf)
df_new<- sqldf("select ColB,rtrim(ColA,'-') as ColA from df")
ColB ColA
1 3 djdn
2 5 dn-dn
3 8 ndmc
4 9 nd-nd-md
库(sqldf)
df_new使用rtrim
似乎更容易,这里有一个使用substr
的解决方案:
sqldf使用SQLite,它没有RIGHT
或LEFT
函数,因此使用SUBSTR
函数,而LEN
函数是LENGTH
library(sqldf)
df_new <- sqldf("select df.*,
CASE
WHEN substr(ColA, length(ColA),1) = '-' THEN substr(ColA, 1, length(ColA)-1)
ELSE ColA
END AS New_Col from df")
库(sqldf)
df_new请编辑问题以指定(可能带有标记)您正在查询的RDBMS。gsub(“-$”,“”,txt)
谢谢@M-M它需要在sqldf中不幸的是我得到了同样的错误不幸的是-这是基于你的答案的我的新代码-df2问题:sqldf
是否支持REGEXP
?我没有尝试在sqldf中使用regex,但之前已经问过这个问题,谢谢你的回答。也许是时候对sqldf进行重大更新了,该更新将从值的右端删除所有连续的“-”字符(零、一、三、十七,任意数量)。这与问题所问的不同;我不知道这是否重要@nak5120这会改变答案吗?