【发布时间】:2017-08-15 18:05:10
【问题描述】:
我在下面有这个矩阵,应用循环将行名更改为数字。
这是矩阵:
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
【问题讨论】:
-
根据显示的可重复数据,它是
data.frame而不是matrix。y[] <- lapply(y, function(x) as.numeric(as.character(x))) -
改用数据框。为什么它应该是一个矩阵?如果需要,您也可以单独
cbind名称列。 -
当您使用 reshape 包中的转置 t() 时,它会获取数据帧并将它们制成矩阵。我添加了最快的方法来生成数据,这是一个数据框。很抱歉,但很高兴知道。