更改列的数字元素的值

时间:2018-06-01 13:05:01

标签: r dplyr

我正在尝试更改列的数字元素的值,而不必创建帮助列以转换为数字

像这样的东西会引发错误

  

mutate_impl(.data,dots)出错:评估错误:. . . WHERE pk = (SELECT TOP (1) b.pk FROM PS_CART_CT_INF_INV as b WHERE a.INV_CART_ID = b.INV_CART_ID ORDER BY b.DEMAND_DATE DESC ); 必须   是双重类型,而不是字符。

false

1 个答案:

答案 0 :(得分:3)

if_else是类型敏感的。我们只能有一个class。因此,truefalse参数应该是相同的class。在OP的代码中,一个是numeric,另一个是character

df %>% 
   mutate(bar = if_else(!is.na(as.numeric(bar)), 
           as.character(as.numeric(bar)/100), bar))

注意:常规ifelsebase R)仍可在不更改类型的情况下使用

另一种选择是过滤仅包含数值的元素并将其转换为numeric并进行除法

i1 <- grep("^[0-9.]+$", df$bar) # or the is.na(as.numeric route
df$bar[i1] <- as.numeric(df$bar[i1])/100