如何在R语言中去除数据框(dataframe)中的科学计数法
解决数据框中字符型科学计数法转换问题
问题原因
你遇到的问题核心是:bed_file_position_hic的start和end列里的"1e+06"是字符类型的字符串,而非数值类型。options(scipen=999)和format()仅对数值型数据的显示格式生效,直接处理字符型的科学计数法字符串不会有任何变化。
从你提供的chr9_mod结构能看到,它的行名和列名本身就是字符格式的科学计数法字符串,赋值给数据框列后自然保留了字符类型。
可行解决方法
方法1:转换为无科学计数法的字符型
先把字符型的科学计数法字符串转为数值,再格式化为普通数字字符串:
# 处理start列 bed_file_position_hic$start <- format(as.numeric(bed_file_position_hic$start), scientific = FALSE) # 处理end列 bed_file_position_hic$end <- format(as.numeric(bed_file_position_hic$end), scientific = FALSE)
方法2:转为数值型并强制关闭科学计数法显示
如果后续需要对这些值做数值运算,推荐转为数值型,同时通过scipen确保显示时不出现科学计数法:
options(scipen = 999) # 全局关闭科学计数法显示 bed_file_position_hic$start <- as.numeric(bed_file_position_hic$start) bed_file_position_hic$end <- as.numeric(bed_file_position_hic$end)
优化初始赋值步骤(从源头避免问题)
如果想从一开始就避免字符型科学计数法,可以在提取chr9_mod的行名/列名时直接转换:
options(scipen=999) chr9_mod <- chr9[26:3531,26:3531] bed_file_position_hic <- as.data.frame(matrix(ncol=3,nrow=3506)) colnames(bed_file_position_hic) <- c("chrom","start","end") j <- 1 k <- 3506 for(i in 1){ # 提取行名后直接转数值再转字符 bed_file_position_hic$start[j:k] <- format(as.numeric(rownames(chr9_mod)[i]), scientific = FALSE) # 列名同理处理 bed_file_position_hic$end[j:k] <- format(as.numeric(colnames(chr9_mod)[1:3506]), scientific = FALSE) j <- k +1 k <- k+1+3505 }
内容的提问来源于stack exchange,提问作者rheabedi1
相关产品推荐
相关产品推荐

