我最近遇到了一个问题,每次读取包含表格值的csv文件时,R都将其读取为列表格式而不是数字格式。由于没有任何帖子能够提供我完整的答案,一旦我能够运行它,我决定在这里包含我使用的脚本,希望对某些人有用。以下是脚本及其描述,以及一些选项(如果需要):
(1) 从csv文件中读取数据。在这里,文件没有标题,所以我设置了F,如果你的文件有标题,则将其更改为T。
(5) 将数据从列表转换为数值形式,并将其放入矩阵 dataNum 中。
(1) 从csv文件中读取数据。在这里,文件没有标题,所以我设置了F,如果你的文件有标题,则将其更改为T。
data <- read.csv("folder_path/data_file.csv", header=F)
(1.a) 注意:如果你收到一个警告,说“readTableHeader找到不完整的最终行”,那么意味着R没有找到文件结束符。只需在csv文件末尾加上一行空行即可,这条消息就不会再出现了。
(2) 你可以使用mode命令检查数据是否为列表格式(如果是数字,则无需执行此过程!)。
mode(data)
(3) 使用数据的维度,初始化一个矩阵(为NA),其中包含您希望以数字格式呈现的数据。
dataNum <- matrix(data = NA, nrow = dim(data)[1], ncol = dim(data)[2])
(4) 可选:如果您想要为列和/或行添加名称,您可以使用以下其中一种选项。
(4a) 添加列和行的名称,假设它们都有类似的信息,换句话说,您希望名称为col_1,col_2,...和row_1,row_2,...
colnames(dataNum) <- colnames(dataNum, do.NULL = F, prefix = "col_")
rownames(dataNum) <- rownames(dataNum, do.NULL = F, prefix = "row_")
(4b) 如果您想为每列和每行使用不同的名称,则使用此选项,并手动添加所有名称。
colnames(dataNum) <- c("col_name_1", "col_name_2")
rownames(dataNum) <- c("row_name_1", "row_name_2")
(5) 将数据从列表转换为数值形式,并将其放入矩阵 dataNum 中。
for (i in 1:dim(data)[2]) {
dataNum[,i] <- c(as.numeric(data[[i]]))
}
(6) 您可以使用mode命令检查矩阵是否为数字格式。
mode(dataNum)
(7) 可选:如果您希望转置矩阵,可以使用以下指令。
dataNum <- t(dataNum)