将一个列中的对数expression式从字符转换为数字类
我已经通过使用XLConnect包导入了一个Excel文件:
data <- loadWorkbook("C:/Users...") data <- readWorksheet(data, sheet = "Blad1")
数据由包含string和数字的列组成。 一些列中包含指数数字,例如:“8.55×10-23”(应该是10 ^ -23)。 所有这些列都作为字符向量导入,而不是数字向量,我可以理解。 不过,我已经尝试了一些不同的方式将这些列转换为数字向量,而不成功:
-
试过(在这种情况下第9列):
data[, 9] <- gsub(" × 10", "*10^(", data[, 9]) data[, 9] <- paste(data[, 9], ")", sep = "")
这实际上成功地使指数数字看起来像:8.94 * 10 ^( – 11)。 然后我试着:
data[, 9] <- lapply(data[, 9], as.numeric) print(data)
但是我拿到了那个专栏里的NA。
我也试过将NA变成8.94×10 ^( – 11),8.94 * 10 ^ -11,8.94 * 10E-11,8.94 * e(-11)(以及其他组合) //在*和x和^之前(以读取符号作为算术运算符而不是字符),但是它没有帮助。 如果我直接在控制台中inputexpression式8.94 * 10 ^( – 11),它可以正确评估它,并成为一个数字。 我也尝试在readWorksheet中使用参数colTypes,但是我还没有能够得到正确的语法(我认为),我还没有find在互联网上的例子(我真的不明白的帮助文件那个论点)。
如果有人有一个解决scheme,这将是非常有益的,因为它感觉我真的错过了一些明显的东西。 我对这个问题的愚蠢的问题/不好的解释事先道歉,我对R很新颖= =)
非常感谢你的帮助!
此致
Sinael
编辑:
到目前为止,我的代码看起来像这样:
GWAS_data <- function () { library(XLConnect) GWAS_data <- loadWorkbook("C:/Users...") #where the data is located on my computer GWAS_data2 <- readWorksheet(GWAS_data, sheet = "Blad1") GWAS_data2[, 9] <- gsub(" × 10", "\\*10\\^\\(", GWAS_data2[, 9]) # Starting with just trying to transform column 9: GWAS_data2[, 9] <- paste(GWAS_data2[, 9], ")", sep = "") GWAS_data2[, 9] <- lapply(GWAS_data2[, 9], as.numeric) print(GWAS_data2) print(lapply(GWAS_data2, class))
然后我最后列9是NA值…而数据是一个.xls文件与第一行的数据看起来像这样,在自由职业者的办公室文件,我无法find如何在这里上传= ):
rs131 4 44870448 GNPDA2 T / C 0.44 0.067 0.007 8.94×10-11 4.29×10-18 1.58×10-23
或者,如果你喜欢用逗号分隔:
rs131,4,44870448,GNPDA2,T / C,0.44,0.067,0.007,8.94×10-11,4.29×10-18,1.58×10-23
谢谢你的帮助!
试试e格式的科学记数法如下:
s <- '8.94*10^(-11)' s <- gsub("\\*10\\^", "e", s) s <- gsub('\\(|\\)', '', s) as.numeric(s) [1] 8.94e-11
不知何故,我解决了它。 首先我改变了函数的第一部分,我使用read.csv而不是使用XLConnect包。 read.csv自动将所有“^”转换为“?”,但是我使用gsub将它们转换为标准格式,即“8.94e-11”。
但是,我认为主要的问题在于function的第二部分:
GWAS_data2[, 9] <- lapply(GWAS_data2[, 9], as.numeric)
我读了一个地方,如果它的一个单独的列函数认为它是一个向量,不知何故,当我这样写这个问题就解决了,并且改变了第9列到第11列而不是第9列:
GWAS_data2[, 9:11] <- lapply(GWAS_data2[, 9:11], as.numeric)
不太明白为什么它的工作,但我到了那里。 谢谢您的帮助!