我有一个如下数据框:
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
答案 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没有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")
答案 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 '%-')