【问题标题】:Column is being returned with negative sinal in the end of field in R在 R 中的字段末尾返回带有负信号的列
【发布时间】:2018-06-05 21:29:20
【问题描述】:

我正在尝试在 R Studio 的 SQL Server 中运行此代码...

CASE 
   WHEN COLUMN1 LIKE '%-%' 
      THEN CAST((REPLACE(COLUMN1, '-', '') AS NUMERIC) * -1 
      ELSE COLUMN1 
END VALUE

我正在使用数据表,因为我的文件有 2 GB,我尝试使用这个:

MYDATATABLE[, newfield:=ifelse((COLUMN1 %like% '-'), ***replace '-' for nothing and mutiply this for "-1"***, COLUMN1)]

该列以值结尾处的负号开始返回 - 如下所示:

COLUMN1
--------
 55.400-
 60.440-
 61.280-
136.400-
506.333-

【问题讨论】:

  • (1) 请使用 SO 编辑工具正确格式化您的代码。 (2) MYDATATABLE[...] 似乎不是有效的 R 代码。中缀运算符%like$ 来自哪里?请edit您的问题包括一些示例数据和您的预期输出;我不清楚你想做什么。什么是“负信号”?你是说信号吗?签到?
  • 对不起,我没有很好地解释我真正想做的事情,Prem 的答案很有效。感谢您的帮助。

标签: r sql-server dplyr data-manipulation


【解决方案1】:

如果我正确理解了您的问题,那么您可以尝试两步过程。

如果col1 具有-,则可以先创建一个新列new_col,而不是缓慢执行ifelse,方法是在从col1 中删除- 后分配col1 的数值的负数。然后将new_col中的NA值替换为col1的数值。

library(data.table)

DT[grepl("-", col1), 
   new_col := - as.numeric(gsub("-", "", col1))][is.na(new_col), new_col := as.numeric(col1)]

给了

> DT
    col1 id new_col
1:  -123  1    -123
2: 1233-  2   -1233
3:    45  3      45


样本数据:

DT <- data.table(col1 = c("-123","1233-", "45"),
                 id = c(1,2,3))
#    col1 id
#1:  -123  1
#2: 1233-  2
#3:    45  3

【讨论】:

  • 谢谢普雷姆!很好的解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-15
相关资源
最近更新 更多