代码之家  ›  专栏  ›  技术社区  ›  nak5120

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

  •  0
  • nak5120  · 技术社区  · 6 年前

    我有一个如下的数据框架:

        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
    
    2 回复  |  直到 6 年前
        1
  •  1
  •   BENY    6 年前

    我想你在找 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
    
        2
  •  0
  •   bignose    6 年前

    要匹配结尾处的__value contains_-_,请使用(我将假定为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 '%-')
    
        3
  •  0
  •   Kerry Jackson    6 年前

    sqldf使用sqlite,它具有 RIGHT LEFT 函数,所以使用 SUBSTR 函数,以及 LEN 函数是 LENGTH .

    library(sqldf)
    df_new <- sqldf("select df.*, 
                   CASE 
                    WHEN substr(ColA, length(ColA),1) = '-' THEN substr(ColA, length(ColA)-1) 
                   ELSE ColA
                   END AS New_Col from df")