从列表转换为R中的数字

Edg*_*tiz 14 r list numeric matrix

我最近遇到了一个问题,每当我读取包含带有值的表的csv文件时,R就会将其读作列表格式而不是数字.因为没有线程为我提供了我的情况的完整答案,一旦我能够运行它,我决定在这里包含对我有用的脚本,希望它对某人有用.在这里,它有一些描述和一些选项,以防你需要它:

(1)从csv文件中读取数据.这里文件没有标题,所以我把F,如果你有一个标题,然后把它改成T.

data <- read.csv("folder_path/data_file.csv", header=F)
Run Code Online (Sandbox Code Playgroud)

(1.a)注意:如果您收到"readTableHeader找到的不完整的最终行"的警告,则表示R未找到文件结束符号.只需在csv文件的末尾添加一个空行,消息就不会再显示.

(2)您可以使用mode命令检查数据是否为列表格式(如果是数字,那么您已完全设置,根本不需要此过程!).

mode(data)
Run Code Online (Sandbox Code Playgroud)

(3)使用数据维度初始化您想要数字格式数据的矩阵(作为NA).

dataNum <- matrix(data = NA, nrow = dim(data)[1], ncol = dim(data)[2])
Run Code Online (Sandbox Code Playgroud)

(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_")
Run Code Online (Sandbox Code Playgroud)

(4b)如果您希望每列和每行都有不同的名称,请改用此选项并手动添加所有名称.

colnames(dataNum) <- c("col_name_1", "col_name_2")
rownames(dataNum) <- c("row_name_1", "row_name_2")
Run Code Online (Sandbox Code Playgroud)

(5)将数据从列表转换为数字形式,并将其放入矩阵dataNum中.

for (i in 1:dim(data)[2]) {
    dataNum[,i] <- c(as.numeric(data[[i]]))
}
Run Code Online (Sandbox Code Playgroud)

(6)您可以使用mode命令检查矩阵是否为数字格式.

mode(dataNum)
Run Code Online (Sandbox Code Playgroud)

(7)可选:如果您想转置矩阵,可以使用以下指令.

dataNum <- t(dataNum)
Run Code Online (Sandbox Code Playgroud)

flo*_*del 21

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

data <- data.matrix(data)
Run Code Online (Sandbox Code Playgroud)

还有

data <- as.matrix(data)
Run Code Online (Sandbox Code Playgroud)

但是一个重要的区别是,如果您的数据包含因子或字符列: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"
Run Code Online (Sandbox Code Playgroud)

  • 这两种方法(原帖或下面的答案)都不适合我,所以我仍然无法得到rowSums ... (2认同)