これは単純な質問なので、以前に尋ねた人への参照が見つからないことに驚いています。それはこれと同じではなく、この議論の対象にもなりません。
名前付きのdimnamesを持つ4-dマトリックス(寸法16x10x15x39)があります(csvなどからデータフレームを取得すると発生しますcast
。dimnamesの名前を取得しますnames(dimnames(matrix))
)
次に、列 (つまり、最初の次元) を行の合計の一部に置き換えたいので、次のようにします。
matrix2 <- apply(matrix1, c(2,3,4), function(x){x/sum(x)})
しかし、今names(dimnames(matrix2))
は最初の次元が空白です。他の dimname 名は保持されています。
では、名前付きのディメンション名を持つマトリックスを実行apply
し、残りのすべてのディメンションの名前を保持するにはどうすればよいでしょうか?
再現可能な例
問題の簡単な例を次に示します。コード全体を実行して、最後の 2 行を確認してください。
x <- data.frame(
name=c("bob","james","sarah","bob","james",
"sarah","bob","james","sarah","bob",
"james","sarah"),
year=c("1995","1995","1995","1995","1995",
"1995","2005","2005","2005","2005",
"2005","2005"),
sample_num=c("sample1","sample1","sample1",
"sample2","sample2","sample2",
"sample1","sample1","sample1",
"sample2","sample2","sample2"),
value=c(1,2,3,2,3,4,1,2,3,2,3,4)
)
x <- cast(x, sample_num ~ name ~ year)
x_fractions <- apply(y,c(2,3),function(x){x / sum(x)})
names(dimnames(x))
names(dimnames(x_fractions))