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

时间:2019-03-07 22:01:28

标签: 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,如果值末尾存在“-”,我想删除该值。

这是我尝试的代码:

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

3 个答案:

答案 0 :(得分:1)

我认为您正在寻找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

答案 1 :(得分:1)

虽然使用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")

答案 2 :(得分:0)

要匹配“值的末尾包含'-'”,请使用(我假设是PostgreSQL)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 '%-')