gpt4 book ai didi

R 申请 : loses dimname names

转载 作者:行者123 更新时间:2023-12-04 10:35:37 27 4
gpt4 key购买 nike

这是一个足够简单的问题,令我感到惊讶的是,我找不到任何对之前问过它的人的引用。和this不一样,也不受 this discussion 的保护.

我有一个 4-d 矩阵(尺寸为 16x10x15x39),带有命名的 dimnames(这是当你 cast 来自例如 csv 的数据帧时会发生的情况。你可以使用 names(dimnames(matrix)) 获得 dimnames 的名称)

然后我想用行总数的分数替换列(即第一维),所以我这样做:

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

最佳答案

我不太确定你在找什么,但我想 sweep功能非常适合您的目标。尝试:

result <- sweep(test, c(2,3,4), colSums(test), FUN='/')

哪里 test是@user2068776 创建的数组。 dimnames被保留下来。
dimnames(result)
$a
[1] "a1" "a2"

$b
[1] "b1" "b2"

$c
[1] "c1" "c2"

$d
[1] "d1" "d2"

关于R 申请 : loses dimname names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com