如果 Column 在值的末尾包含“-”,则删除末尾的“-” - sqldf

If Column contains "-" at the end of a value, remove the "-" at the end - 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

要匹配“值末尾包含‘-’”,请使用(我假设是 PostgreSQL)a pattern match:

SELECT
    col_a
FROM df
WHERE (col_a LIKE '%-')

然后,要获取不带最终字符(您现在知道是“-”字符)的值,请使用 string manipulation function:

SELECT
    left(col_a, -1) AS col_a_truncated
FROM df
WHERE (col_a LIKE '%-')

我想你在找 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

虽然使用 rtrim 似乎更容易,但这里有一个使用 substr 的解决方案: sqldf使用SQLite,没有RIGHTLEFT函数,所以用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")