我正在尝试更改列的数字元素的值,而不必创建帮助列以转换为数字
像这样的东西会引发错误
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
答案 0 :(得分:3)
if_else
是类型敏感的。我们只能有一个class
。因此,true
和false
参数应该是相同的class
。在OP的代码中,一个是numeric
,另一个是character
。
df %>%
mutate(bar = if_else(!is.na(as.numeric(bar)),
as.character(as.numeric(bar)/100), bar))
注意:常规ifelse
(base R
)仍可在不更改类型的情况下使用
另一种选择是过滤仅包含数值的元素并将其转换为numeric
并进行除法
i1 <- grep("^[0-9.]+$", df$bar) # or the is.na(as.numeric route
df$bar[i1] <- as.numeric(df$bar[i1])/100