这是一个足够简单的问题,我很惊讶我找不到任何以前问过它的人的参考资料。它与this不同,本讨论也不涵盖它。
我有一个名为 dimnames 的 4-d 矩阵(尺寸 16x10x15x39)(当您cast
从一个数据帧(例如 csv)获取数据时会发生这种情况。您可以使用 .names(dimnames(matrix))
然后我想用行总数的分数替换列(即第一个维度),所以我这样做:
matrix2 <- apply(matrix1, c(2,3,4), function(x){x/sum(x)})
但现在names(dimnames(matrix2))
第一个维度是空白的。其他 dimname 名称已被保留。
那么:我怎样才能apply
在一个名为 dimnames 的矩阵上运行并保留所有剩余维度的名称?
一个可重现的例子
这是问题的简单示例。只需运行整个代码并查看最后两行。
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))