无法将因子转换为数字

Unable to turn factor into numeric

我接收了一个开放存取数据,但我无法将第 5 列到第 50 列转换为数字。

file_url <- "https://genelab-data.ndc.nasa.gov/genelab/static/media/dataset/GLDS-138_metabolomics_mx%20367428_NASA_bacteria%20cells_09-2017_submit%20.csv?version=1"
dst1 = 'GLDS-138_metabolomics_mx 367428_NASA_bacteria cells_09-2017_submit.csv'
download.file(file_url, dst1)
Bdata <- read.csv(dst1, stringsAsFactors = FALSE)

Bdata <- t(Bdata)
Bdata <- Bdata[-c(2:7, 114:118),]
Bdata <- Bdata[,-c(1,2,6,8)]
Bdata[1,1:4] <- Bdata[2,1:4]
Bdata <- Bdata[-c(2),]

columnName <- Bdata[1,]
rowName    <- Bdata[,1]
colnames(Bdata) <- columnName
rownames(Bdata) <- rowName
Bdata <- Bdata[-1 ,]
Bdata <- as.data.frame(Bdata)

Bdata[,5:50] <- as.numeric(as.character(Bdata[,5:50]))

我尝试了很多方法,其中大部分方法要么强制 NA,要么更改信息。

有人知道如何解决这个问题吗?

您需要这个而不是最后一行代码:

Bdata[,5:50] <- as.data.frame(lapply(Bdata[,5:50], function(x) as.numeric(as.character(x))))

上面的代码不起作用的原因是它试图将数据帧 (Bdata[,5:50]) 转换为数字向量。但您真正想要的是将每一列变成一个数值向量。 lapply() 将传递的函数应用于列表的每个元素(数据框实际上是一个特殊列表)和 returns 列表。这就是为什么之后需要再次将其转换为数据帧的原因。

您可以试试下面的代码

Bdata[,5:50]<- `class<-`(as.matrix(Bdata[,5:50]),"numeric")