我使用XLConnect包导入了一个excel文件:
data <- loadWorkbook("C:/Users...")
data <- readWorksheet(data, sheet = "Blad1")
数据由包含字符串和数字的列组成。有些列包含指数数字,例如:“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.94x10 ^( - 11),8.94 * 10 ^ -11,8.94 * 10E-11,8.94 * e(-11)(以及其他组合),在*和x和^之前添加/和//(以便将符号读作算术运算符而不是字符),但它没有帮助。如果我直接在控制台中键入表达式8.94 * 10 ^( - 11),它可以正确评估它并成为数字。我也尝试在readWorksheet中创建参数colTypes,但是我还没能得到正确的语法(我认为),而且我没有在互联网上找到有效的例子(我真的不明白帮助文件那个论点)。
如果有人有解决方案,那真的很有帮助,因为我觉得我真的错过了一些明显的东西。我事先为这个问题的愚蠢问题/坏解释道歉,我对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文件,第一行数据看起来像这样,在libre office文档中我无法找到如何在这里上传=):
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
感谢您的帮助!
答案 0 :(得分:1)
尝试使用科学记谱法的格式,如下所示:
s <- '8.94*10^(-11)'
s <- gsub("\\*10\\^", "e", s)
s <- gsub('\\(|\\)', '', s)
as.numeric(s)
[1] 8.94e-11
答案 1 :(得分:0)
不知怎的,我解决了它。首先我更改了函数的第一部分,我使用read.csv而不是使用XLConnect包。 read.csv自动转换所有&#34; ^&#34; to&#34;?&#34;,但是我用gsub将它们改成标准格式,即&#34; 8.94e-11&#34;。
但是,我认为主要问题出在功能的第二部分:
GWAS_data2[, 9] <- lapply(GWAS_data2[, 9], as.numeric)
我在某处读到,如果它的单个列,该函数将其视为一个向量,并且当我这样编写时,问题就解决了,并且将第9列转换为第11列而不仅仅是第9列:
GWAS_data2[, 9:11] <- lapply(GWAS_data2[, 9:11], as.numeric)
不太明白为什么它有效,但我到了那里。谢谢你的帮助!