R根据数据框中的元素名称填充矩阵

时间:2016-06-20 20:17:22

标签: r matrix dataframe

如果我有可以建模的数据:

a1 <- c("bob","bill",0.2)
a2 <- c("bob", "bert", 0.1)
a3 <- c("bill", "bert", 0.1)

my.df <- as.data.frame(rbind(a1, a2, a3), stringsAsFactors = FALSE)

colnames(my.df) <- c("name_1", "name_2", "value")
row.names(my.df) <- NULL

my.names <- unique(as.character(c(my.df$name_1, my.df$name_2)))

my.matrix <- matrix(0, nrow = length(my.names), ncol = length(my.names))

row.names(my.matrix) <- my.names

colnames(my.matrix) <- my.names

如何使用my.matrix中的值填充my.dfmy.df中的前两列描述了my.matrix要填充的坐标?

2 个答案:

答案 0 :(得分:4)

您可以将my.df的前两列强制转换为索引矩阵,并将my.matrix的剩余列作为RHS进行索引分配my.df

my.matrix[as.matrix(my.df[c('name_1','name_2')])] <- as.double(my.df$value);
my.matrix;
##      bob bill bert
## bob    0  0.2  0.1
## bill   0  0.0  0.1
## bert   0  0.0  0.0

我还强迫RHS加倍,因为我认为你想要保留my.matrix的类型。

答案 1 :(得分:2)

使用for循环的简单解决方案:

my.df$value <- as.numeric(my.df$value)
for (i in 1:nrow(my.df)) {
   my.matrix[rownames(my.matrix) == my.df$name_1[i], 
             colnames(my.matrix) == my.df$name_2[i]] <- my.df$value[i]
}