gpt4 book ai didi

r - 使用熔化/类型转换创建百分比而不是总和

转载 作者:行者123 更新时间:2023-12-04 12:20:31 25 4
gpt4 key购买 nike

简单的例子。我想使用 cast/melt 而不是 sums 来创建百分比数据框。

例子。

eg <- data.frame(
Time = factor(c(1,2,1,2)),
A1 = c(0, 0, 1, 1),
A2 = c(1, 1, 1, 1),
B1 = c(0, 0, 0, 0)
)

eg.m <- melt(eg,id="Time")
eg.c <- cast(eg.m,Time ~ variable, sum, margins="grand_row")

在上面的示例中,我可以生成总和和总计。而不是产生总和,有没有办法在每个单元格中产生百分比,即单元格/gran_row的总和?我知道我可以在这里使用 ddply 和 reshape 做一些事情,但想知道是否有更优雅的解决方案。

这是我正在寻找的示例:
  Time  A1  A2  B1
1 1 0.5 0.5 0
2 2 1.0 1.0 0

最佳答案

我似乎很难避免分两步做这件事。问题是你想在 dcast 操作的输出上运行 cumsum/sum 函数,除非我误解了你仍然想要什么。

首先是你所拥有的:

eg.c <- dcast(eg.m,Time ~ variable, sum )

其次是将 cumsum/sum 函数应用于列:
japply(eg.c, sapply(eg.c, is.numeric ), function(x) cumsum(x)/sum(x) )

Time A1 A2 B1
1 1 0.5 0.5 NaN
2 2 1.0 1.0 NaN

哪里 japply是我的 .RProfile 中的一个函数:
# Takes a data.frame and returns a data.frame with only the specified columns transformed
japply <- function(df, sel, FUN=function(x) x, ...) {
df[,sel] <- sapply( df[,sel], FUN, ... )
df
}

关于r - 使用熔化/类型转换创建百分比而不是总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10516362/

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