转换tibble后创建热狗占比新列遇报错的解决方法
问题解决方法
错误原因分析
- 计算占比时用引号包裹
"Hotdog"和"Banana",R会把它们识别成普通字符串,而非数据列的数值,因此触发non-numeric argument to binary operator错误。 - 数值转换代码存在语法错误:多了半截的
%>符号,导致转换逻辑中断。
步骤1:修正数值类型转换
删掉错误的管道符,直接执行类型转换:
df$Banana <- as.numeric(as.character(df$Banana)) df$Hotdog <- as.numeric(as.character(df$Hotdog))
转换完成后可以用str(df)检查列类型,确认Banana和Hotdog显示为num(数值型)。如果列中存在非数字字符(比如空格、字母),可以用readr::parse_number()更稳健地提取数值:
library(readr) df$Banana <- parse_number(df$Banana) df$Hotdog <- parse_number(df$Hotdog)
步骤2:正确计算热狗占比
去掉列名的引号,直接引用数据列进行计算:
df$hotdog_percent <- with(df, Hotdog / (Hotdog + Banana))
如果习惯用tibble适配的dplyr语法,可以一步完成类型转换和占比计算:
library(dplyr) df <- df %>% mutate( Banana = as.numeric(as.character(Banana)), Hotdog = as.numeric(as.character(Hotdog)), hotdog_percent = Hotdog / (Hotdog + Banana) )
内容的提问来源于stack exchange,提问作者Joseph Carthof
相关产品推荐
相关产品推荐

