使用R中的数据帧填充矩阵

使用R中的数据帧填充矩阵,r,matrix,indexing,dataframe,R,Matrix,Indexing,Dataframe,我有一个空矩阵m: m <- matrix(0, nrow = 4, ncol = 2, byrow = TRUE, dimnames = list(c("sp1", "sp2", "sp3", "sp4"), c("x", "y"))) 我试过: m[d[, c("species", "x")]] <- d[, "freq"] m[d[,c(“物种”,“x”)]]cast和merge的组合很好 设置

我有一个空矩阵
m

m <- matrix(0, nrow = 4, ncol = 2, byrow = TRUE,
            dimnames = list(c("sp1", "sp2", "sp3", "sp4"),
                            c("x", "y")))
我试过:

m[d[, c("species", "x")]] <- d[, "freq"]

m[d[,c(“物种”,“x”)]]cast和merge的组合很好

设置数据

m <- matrix(0, nrow = 4, ncol = 2, byrow = TRUE,
            dimnames = list(c("sp1", "sp2", "sp3", "sp4"),
                            c("x", "y")))
d <- data.frame(site = c("x", "y", "u", "v"), 
              species = c("sp1", "sp1", "sp1", "sp1"), 
              freq = c(0.2, 0.3, 0.5, 0.1))
如果要将NA转换为另一个值,请使用fill参数

cast(species ~ site, data = d, value = "freq", add.missing = TRUE, 
    subset = site == "x", fill = 0)

这可能不是最好的方法,但这是可行的:

for(i in 1:nrow(d)){m[rownames(m)==d[i,2],colnames(m)==d[i,1]] <- d[i,3]}

for(i in 1:nrow(d)){m[rownames(m)==d[i,2],colnames(m)==d[i,1]]谢谢!我最终使用了plannapus的答案,因为它比较短。但是你的版本更稳定吗?我添加了简化的代码。这一切都取决于m是否已经定义,或者你是否可以从d创建m。谢谢!这很有效。但是,你预见它会有任何稳定性问题吗?老实说,我想不出任何问题。
library(reshape)
dc <- cast(species ~ site, data = d, value = "freq")
md <- as.data.frame(m)
md$species <- rownames(md)
md <- merge(
    md, 
    dc[, c("species", "x")], 
    all.x = TRUE, 
    by = "species", 
    suffixes = c("", ".tmp"))
md$x[!is.na(md$x.tmp)] <- md$x.tmp[!is.na(md$x.tmp)]
md$x.tmp <- NULL
d <- data.frame(
    site = c("x", "y", "u", "v"), 
    species = factor(
        c("sp1", "sp1", "sp1", "sp1"), 
        levels = c("sp1", "sp2", "sp3", "sp4")), 
    freq = c(0.2, 0.3, 0.5, 0.1))
cast(species ~ site, data = d, value = "freq", add.missing = TRUE)
cast(species ~ site, data = d, value = "freq", add.missing = TRUE, 
    subset = site == "x")
cast(species ~ site, data = d, value = "freq", add.missing = TRUE, 
    subset = site == "x", fill = 0)
for(i in 1:nrow(d)){m[rownames(m)==d[i,2],colnames(m)==d[i,1]] <- d[i,3]}