如果我有可以建模的数据:
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.df
。 my.df
中的前两列描述了my.matrix
要填充的坐标?
答案 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]
}