gpt4 book ai didi

r - 简化可怕的 R 代码以调整行均值

转载 作者:行者123 更新时间:2023-12-03 18:26:36 26 4
gpt4 key购买 nike

我知道使用 R 强大的向量处理功能可以使这段代码更短、更高效。我只是不知道现在如何......

基本任务是调整每行中的单元格,以便强制行总数匹配由另一个数据框确定的预定义数字。这样,每个区域的总人口被强制为某个值(每行代表一个区域),而从一列移动到下一列的单元格之间的比率保持不变。

丑陋的做法(第一个循环只是创建一个示例数据框;确保可以做得更好;我不能停止使用循环!):

con1 <- array(dim=c(5,3))

set.seed(1066)
for(i in 1:ncol(con1)){
con1[,i] <- round(rnorm(n=5,mean=10,sd=3))}
con1 <- data.frame(con1)
con2 <- data.frame(array(c(8:13, 9:14, 10:15), dim=c(5,3)))

apply(con1,1, sum)
apply(con2,1, sum) # different row totals

con1.adj <- con1
for ( i in 1:nrow(con1)){
con1.adj[i,1] <- con1[i,1] * ( sum(con2[i,]) / sum(con1[i,]) )
con1.adj[i,2] <- con1[i,2] * ( sum(con2[i,]) / sum(con1[i,]) )
con1.adj[i,3] <- con1[i,3] * ( sum(con2[i,]) / sum(con1[i,]) )
}
con1.adj <- data.frame(con1.adj)
apply(con1.adj,1, sum) # same row totals

(上下文:从其他人的工作中挖掘出这段代码并愉快地使用了一段时间。现在我已经在陡峭的 R 学习曲线上略微上升了一点,这对我来说看起来很糟糕。还希望代码被重新使用其他人。真的很享受这门语言,如果我能找到一种更漂亮的方式来做这件事,我会更喜欢它)

最佳答案

我认为这个单线应该完成这项工作:

con1.adj <- con1 * rowSums(con2) / rowSums(con1)

关于r - 简化可怕的 R 代码以调整行均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15056822/

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