R语言mutate函数报错:非数值参数参与二元运算求助
解决字符型列相乘报错问题:将字符转为数值类型
报错的核心原因很明确:你要相乘的product_price和purchase_price是字符型(col_character()),R没法对字符执行乘法运算,必须先把它们转换成数值型才能计算。
修改后的完整代码
用dplyr的管道流可以让代码更简洁连贯:
library(dplyr) library(readr) # 读取数据 new_test_import <- read_csv("test_import.csv") # 筛选列、转换类型并计算总金额 total_price <- new_test_import %>% select(product, product_price, purchase_price) %>% mutate( # 将字符列转为数值列 product_price = as.numeric(product_price), purchase_price = as.numeric(purchase_price), # 计算乘积生成total列 total = product_price * purchase_price ) # 查看结果 head(total_price)
额外注意事项
- 如果转换时出现
NAs introduced by coercion警告,说明你的字符列里混了非数字内容(比如货币符号$、千分位逗号,或者文字描述),需要先清理:
比如列里有$符号,用stringr包的str_remove处理:library(stringr) total_price <- new_test_import %>% select(product, product_price, purchase_price) %>% mutate( product_price = as.numeric(str_remove(product_price, "\\$")), purchase_price = as.numeric(str_remove(purchase_price, "\\$")), total = product_price * purchase_price ) - 也可以在读取数据时直接指定列类型,从源头避免类型问题:
new_test_import <- read_csv( "test_import.csv", col_types = cols( product = col_character(), product_price = col_double(), purchase_price = col_double() ) )
内容的提问来源于stack exchange,提问作者Wisam_Saeed
相关产品推荐
相关产品推荐

