基于字符长度的数据框字符串处理及apply函数报错解决
问题解决:向量处理时apply报错的修复及字符串转换优化
错误原因
sample$RiskCode是一维向量,而apply()仅适用于具备二维及以上维度的对象(如矩阵、数据框)。向量没有维度属性(dim(sample$RiskCode)返回NULL),因此调用apply()会触发dim(X) must have a positive length错误。
解决方案
方案1:用sapply()替代apply()
sapply()专门用于向量/列表的逐元素处理,直接替换即可:
# 生成新列 sample$RiskCode2 <- sapply(sample$RiskCode, icd_transform)
方案2:优化为向量化函数(更高效)
原函数是逐元素判断逻辑,可改用ifelse()嵌套实现向量化操作,避免循环类函数,运行效率更高:
icd_transform_vec <- function(x) { ifelse(nchar(x) > 6, substr(x, 1, 6), ifelse(nchar(x) == 5, paste0(x, "0"), ifelse(nchar(x) == 3, paste0(x, ".00"), x))) } # 直接调用生成新列 sample$RiskCode2 <- icd_transform_vec(sample$RiskCode)
验证结果
运行上述任意方案后,sample表结果如下:
| RiskCode | RiskCode2 |
|---|---|
| A01 | A01.00 |
| A02.999 | A02.99 |
内容的提问来源于stack exchange,提问作者Dhestar Bagus Wirawan
相关产品推荐
相关产品推荐

