R语言使用dplyr的%>%管道符操作数据框列报错求助
错误原因
你的写法不符合dplyr管道符的传递逻辑和tidyverse的列调用规则,核心问题有两个:
%>%默认将左侧的输出作为右侧函数的第一个参数,你写的df %>% gsub("1:2=","",as.character(AvsDD))实际执行逻辑是gsub(df, "1:2=","",as.character(AvsDD)),完全不符合gsub()的参数顺序,也和你预期的操作逻辑不符。- 普通R函数无法直接识别数据框内部的列名作为独立变量,只有放在dplyr的列操作函数(比如
mutate())内部时,才能直接通过列名调用数据框的对应列。
正确实现代码
首先确保你已经加载了dplyr包:
library(dplyr)
标准的tidyverse管道写法如下,和你分步操作的效果完全一致:
df <- df %>% mutate( # 替换AvsDD列的指定字符串 AvsDD = gsub("1:2=", "", AvsDD), # 将该列转为数值型 AvsDD = as.numeric(AvsDD) )
也可以合并成一步操作:
df <- df %>% mutate(AvsDD = as.numeric(gsub("1:2=", "", AvsDD)))
可选写法(不推荐)
如果不想用mutate(),也可以用管道占位符.调用指定列,不过这种写法可读性更低:
df$AvsDD <- df %>% pull(AvsDD) %>% gsub("1:2=", "", .) %>% as.numeric()
内容的提问来源于stack exchange,提问作者steve
相关产品推荐
相关产品推荐

