[英]convert matrix to numeric data frame
我有一些数据有点不方便。 它保存为矩阵,所有列向量都是字符。
datamatrix <- structure(c("1", "2", "3", "4", "0.9301", "0.93", "0.9286", "0.9209",
"0.9", "0.8064", "0.7947", "0.7607", "0.8042", "0.7847", "0.7832",
"0.7578", "0.7487", "0.7105", "0.6566", "0.5951", "0.6951", "0.677",
"0.6588", "0.5922", "0.6889", "0.6471", "0.6524", "0.5932"), .Dim = c(4L,
7L))
我的目标是将此矩阵转换为数据帧,将列向量转换为数字类。
我试过以下程序:
1)
datamatrix2 <- as.data.frame(datamatrix)
datamatrix2 <- as.numeric(datamatrix2)
这给出了错误:
"Error: (list) object cannot be coerced to type 'double'"
2)所以我尝试用sapply:
datamatrix3 <- as.data.frame(sapply(datamatrix, as.numeric))
这将我之前拥有的所有列都放在了长列中。
3)当我使用2)中的apply函数对已经转换为数据帧的数据(但仍然是字符向量)时,它采用第一列(1,2,3,4)中的值并将其放在所有其他列中(但按降序排列)。
datamatrix4 <- as.data.frame(sapply(datamatrix2, as.numeric))
转换矩阵的最好方法是改变mode
。 这样您就可以使矩阵成为numeric
,然后您可以轻松地转换为数据框:
mode(datamatrix) = "numeric"
data.frame(datamatrix)
# X1 X2 X3 X4 X5 X6 X7
# 1 1 0.9301 0.9000 0.8042 0.7487 0.6951 0.6889
# 2 2 0.9300 0.8064 0.7847 0.7105 0.6770 0.6471
# 3 3 0.9286 0.7947 0.7832 0.6566 0.6588 0.6524
# 4 4 0.9209 0.7607 0.7578 0.5951 0.5922 0.5932
有几种方法可以做到这一点。 最简单的可能是purrr::map_df()
:
library("purrr")
datamatrix = as.data.frame(datamatrix, stringsAsFactors = FALSE)
datamatrix = map_df(datamatrix, as.numeric)
datamatrix
# A tibble: 4 x 7
# V1 V2 V3 V4 V5 V6 V7
# <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
# 1 1 0.9301 0.9000 0.8042 0.7487 0.6951 0.6889
# 2 2 0.9300 0.8064 0.7847 0.7105 0.6770 0.6471
# 3 3 0.9286 0.7947 0.7832 0.6566 0.6588 0.6524
# 4 4 0.9209 0.7607 0.7578 0.5951 0.5922 0.5932
这明确要求返回数据帧。
基地R
方式是:
datamatrix = as.data.frame(datamatrix)
datamatrix = lapply(datamatrix, as.numeric)
datamatrix = as.data.frame(datamatrix)
str(datamatrix)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.