使用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]}