1

私は空の行列を持っていますm:

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

そして、データフレームdを使用してマトリックスを埋める必要があります

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))

そのため、ifrowname(m)が と等しくd[, "species"]m[, "x"]thend[, "site"]d[, "freq"]行列 m の正しい場所に入力されます。つまり、次のように返されます。

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

私が試してみました:

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

データ フレームのインデックス作成を適切に行っていないと思われますか? 何か案は?ありがとう。

4

2 に答える 2

2

それはおそらく最善の方法ではありませんが、これは機能しています:

for(i in 1:nrow(d)){m[rownames(m)==d[i,2],colnames(m)==d[i,1]] <- d[i,3]}
于 2012-06-20T09:39:15.230 に答える
1

キャストとマージの組み合わせは問題なく機能します。

データの設定

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))

計算を行う

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$site を rownames(m) を含む要素に変換すると、コードを単純化できます

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)

おまけとして、y、u、v の周波数を取得します。それらが不要な場合は、アプリオリに削除してください

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

NA を別の値に変換するには、fill 引数を使用します。

cast(species ~ site, data = d, value = "freq", add.missing = TRUE, 
    subset = site == "x", fill = 0)
于 2012-06-20T09:37:28.020 に答える