r - 在 R 中从列表转换为数字

标签 r list matrix numeric

我最近遇到了一个问题,每次我读取包含带有值的表格的 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)

最佳答案

这是将 data.frame 转换为数字矩阵的更短/更快的方法:

data <- data.matrix(data)

还有
data <- as.matrix(data)

但一个重要的区别是您的数据是否包含因子或字符列:as.matrix将所有内容强制转换为字符矩阵,而 data.matrix将始终返回 numericinteger矩阵。
data <- data.frame(
  logical   = as.logical(c(TRUE, FALSE)),
  integer   = as.integer(c(TRUE, FALSE)),
  numeric   = as.numeric(c(TRUE, FALSE)),
  factor    = as.character(c(TRUE, FALSE))
)

data.matrix(data)
#      logical integer numeric factor
# [1,]       1       1       1      2
# [2,]       0       0       0      1

as.matrix(data)
#      logical integer numeric factor 
# [1,] " TRUE" "1"     "1"     "TRUE" 
# [2,] "FALSE" "0"     "0"     "FALSE"

关于r - 在 R 中从列表转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17506691/

相关文章:

javascript - R Shiny 中的搜索框

c# - List.Add vs HashSet.Add 用于 c# 中的小型集合

javascript - 创建旋转矩阵

MATLAB eig 有时会返回倒号

R 删除只有 NA 的组

c++ - Rcpp 通过 NumericVector 选择/子集 NumericMatrix 列

r - 如何使用中位数函数估算R中的中位数?

python - python 中的内联错误/异常处理

list - 用新的列表元素替换嵌套列表的中间行元素 Q kdb

python - 遍历列表和数组