R语言计算数据框行最大值结果错误,求原因及解决方法
问题原因及解决方法
问题根源
- 你在调用
read_xlsx()时设置了col_types = "text",这会强制所有列以字符类型读取(从输出里的<chr>标识也能确认这一点)。 - 对字符型数据使用
max()函数时,会按字符串字典序比较大小,而非我们需要的数值大小。比如字符串"11"和"9"比较时,因为第一个字符"1"的ASCII码小于"9",会判定"9"更大,这就导致第一行的最大值被错误识别为"9",而非实际的11。
解决方法
方法1:读取时直接识别数值类型
移除col_types = "text"参数,让readxl自动识别列的数值类型:
library(readxl) df <- read_xlsx("Data 1.xlsx", col_names = TRUE)
如果确定所有列都是数值,也可以显式指定col_types = "numeric"。
方法2:读取后转换为数值类型再计算
如果因特殊需求必须先读成字符型,可先将数据列转换为数值类型,再计算行最大值:
# 使用dplyr包转换 library(dplyr) df <- df %>% mutate(across(everything(), as.numeric)) # 或者使用基础R转换 df[] <- lapply(df, as.numeric) # 重新计算行最大值 df$max <- apply(df, 1, max)
内容的提问来源于stack exchange,提问作者Taliman
相关产品推荐
相关产品推荐

