如何将字符矩阵转换为数字,将第一列保留为行名:R

时间:2017-08-15 18:05:10

标签: r matrix numeric

我在下面有这个矩阵,apply循环将行名称更改为数字。

这是矩阵:

             treatmenta treatmentb
John Smith   NA         " 2"      
John Doe     "16"       "11"      
Mary Johnson " 3"       " 1"   

和此代码as.matrix(apply(y, 2, as.numeric))

结果是这样但我希望行名称是人名

     treatmenta treatmentb
[1,]         NA          2
[2,]         16         11
[3,]          3          1

转换为data.table也不起作用。我该怎么做?

以下是重现数据的代码:

name <- c("John Smith", "John Doe", "Mary Johnson")
treatmenta <- c("NA", "16", "3")
treatmentb <- c("2", "11", "1")
y <- data.frame(name, treatmenta, treatmentb)
rownames(y) <- y[,1]
y[,1] <- NULL

2 个答案:

答案 0 :(得分:3)

我们可以做到

git rm --cached App.config

或紧凑型选项

.gitignore

数据

y <- `dimnames<-`(`dim<-`(as.numeric(y), dim(y)), dimnames(y))
y
#              treatmenta treatmentb
#John Smith           NA          2
#John Doe             16         11
#Mary Johnson          3          1

答案 1 :(得分:0)

您将从更通用的数据形式(数据帧)转向矩阵(具有dim属性的向量)。在此as.matrix或从您的数据转换为矩阵的基地的任何方法最终将调用vector(x),这是通用函数将所有变量设置为charactor或将所有内容设置为数字但名称列设置为NAs(取决于如何你打电话给as.matrix)。

话虽如此,如果由于某种原因你仍然需要使用矩阵形式,那么使用它来提高可读性:

treatmenta <- c("1", "16", "3")
treatmentb <- c("2", "11", "1")
y[,1] <- as.matrix(sapply(treatmenta, as.numeric))
y[,2] <- as.matrix(sapply(treatmentb, as.numeric))
#now they are not factors. 
#> class(y)
#[1] "matrix"

name <- c("John Smith", "John Doe", "Mary Johnson")
row.names(y) <- name
# treatmenta treatmentb
# John Smith            1          2
# John Doe             16         11
# Mary Johnson          3          1