我最近遇到了一个问题,每次我读取包含带有值的表的 csv 文件时,R 都会将其读取为列表格式而不是数字格式。由于没有线程为我的情况提供完整的答案,一旦我能够让它运行,我决定在这里包含对我有用的脚本,希望它对某人有用。在这里,有一些描述和一些选项,以备您需要时使用:
(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)