我有从.csv文件包含数字和字符的值所取的数据帧。 我想这个数据帧转换成一个矩阵。 所有包含的信息是数字(非数行予删除),所以它应该是可能的数据帧转换成数字矩阵。 但是,我得到一个字符矩阵。
我发现解决这个是使用的唯一途径as.numeric
为每个行,但是这是一个相当耗时的。 我敢肯定有一种方法有某种做到这一点if(i in 1:n)
-构型,但我想不出它如何工作。 还是真的已经与数值开始的唯一途径,就像这里建议( 决策矩阵数字和名称的命令 )?
也许这是大多数的你很容易的事情:P
该矩阵是大了很多,这仅仅是排第几?下面的代码:
cbind(
as.numeric(SFI.Matrix[ ,1]),
as.numeric(SFI.Matrix[ ,2]),
as.numeric(SFI.Matrix[ ,3]),
as.numeric(SFI.Matrix[ ,4]),
as.numeric(SFI.Matrix[ ,5]),
as.numeric(SFI.Matrix[ ,6]))
# to get something like this again:
Social.Assistance Danger.Poverty GINI S80S20 Low.Edu Unemployment
0.147 0.125 0.34 5.5 0.149 0.135 0.18683691
0.258 0.229 0.27 3.8 0.211 0.175 0.22329362
0.207 0.119 0.22 3.1 0.139 0.163 0.07170422
0.219 0.166 0.25 3.6 0.114 0.163 0.03638525
0.278 0.218 0.29 4.1 0.270 0.198 0.27407825
0.288 0.204 0.26 3.6 0.303 0.211 0.22372633
感谢您的任何帮助!
编辑2:见@ flodel的答案。 好多了。
尝试:
# assuming SFI is your data.frame
as.matrix(sapply(SFI, as.numeric))
编辑:或@ CarlWitthoft在评论中建议:
matrix(as.numeric(unlist(SFI)),nrow=nrow(SFI))
data.matrix(SFI)
从?data.matrix
Description:
Return the matrix obtained by converting all the variables in a
data frame to numeric mode and then binding them together as the
columns of a matrix. Factors and ordered factors are replaced by
their internal codes.
这里是如果数据帧只包含数字的另一种方式。
apply(as.matrix.noquote(SFI),2,as.numeric)
但数据帧转换为矩阵的最可靠的方法是使用data.matrix()
函数。
我有同样的问题,我解决它像这样,通过将原始数据帧无行的名称,后来加入他们
SFIo <- as.matrix(apply(SFI[,-1],2,as.numeric))
row.names(SFIo) <- SFI[,1]
这样做的另一种方法是通过使用read.table()
参数colClasses
通过向指定列型colClasses=c(*column class types*)
如果有6列要作为数字的成员,你需要重复字符串"numeric"
六经逗号分隔倍,导入数据帧, as.matrix()
的数据帧。 PS看起来你有头,于是我把header=T
。
as.matrix(read.table(SFI.matrix,header=T,
colClasses=c("numeric","numeric","numeric","numeric","numeric","numeric"),
sep=","))
我通过导出CSV,然后编辑并重新导入,如下手工填写港定居。
也许你们中的一个专家可以解释为什么这个程序运作得非常好(第一个文件必须与列的数据类型char
, INT
和num
(浮点数)),这都成了char
STEP 1日后型; 但在步骤3的端面R正确地识别出的各列的数据类型)。
# STEP 1:
MainOptionFile <- read.csv("XLUopt_XLUstk_v3.csv",
header=T, stringsAsFactors=FALSE)
#... STEP 2:
TestFrame <- subset(MainOptionFile, str_locate(option_symbol,"120616P00034000") > 0)
write.csv(TestFrame, file = "TestFrame2.csv")
# ...
# STEP 3:
# I made various amendments to `TestFrame2.csv`, including replacing all missing data cells with appropriate numbers. I then read that amended data frame back into R as follows:
XLU_34P_16Jun12 <- read.csv("TestFrame2_v2.csv",
header=T,stringsAsFactors=FALSE)
到达目的地后,回到R,所有列有其正确的测量级别由R自动识别!
文章来源: Right way to convert data.frame to a numeric matrix, when df also contains strings?