R使用separate函数拆分列时报Must extract column错误如何解决
报错原因
你出错的核心原因是tidyr::separate()函数在管道 workflow 下的传参规则不符合要求:
- 你用
%>%把DF传入separate()之后,函数默认的操作对象已经是这个传入的数据框,第一个参数需要传入列名标识(可以是不带引号的裸列名、带引号的字符型列名、或者位置索引),而你传入了DF$tmp——这是直接提取了tmp列的完整向量,长度等于你的数据框行数(你的场景下是452),函数预期接收长度为1的列标识,所以抛出参数长度不匹配的错误。 - 你写的测试代码里第一个参数直接传了裸列名
x,符合函数参数要求,所以可以正常运行。
解决方法
把separate()的第一个参数改成列名tmp即可,两种正确写法可选:
写法1:裸列名(tidyverse 风格推荐)
DF %>% separate(tmp, c(NA, "Number"), "(?<=[A-Z])(?=[0-9])" )
写法2:引号包裹的字符型列名
DF %>% separate("tmp", c(NA, "Number"), "(?<=[A-Z])(?=[0-9])" )
内容的提问来源于stack exchange,提问作者RNewbie
相关产品推荐
相关产品推荐

