我在下面有这个矩阵,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
答案 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