Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果列中包含"-&引用;在一个值的末尾,删除“"-&引用;最后是-sqldf_Sql_R_Sqldf - Fatal编程技术网

如果列中包含"-&引用;在一个值的末尾,删除“"-&引用;最后是-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这会改变答案吗?