gpt4 book ai didi

r - 简单的 R 命令不返回所有值

转载 作者:行者123 更新时间:2023-12-02 01:00:46 25 4
gpt4 key购买 nike

已解决感谢大家的帮助!

我想我犯了一个我已经盯着太久看不出来的简单错误。我有一个包含 4 个类的数据框(存储为数字)。列代表站点,行代表日期。但是,站点分布不均,因此我在最后一行中加入了每个站点与其相邻站点之间的距离。我遇到的问题来自于尝试遍历数据框,并对每个类的总距离求和:

dist_prop = data.frame(cbind(1:4, 0))

for (i in 1:(nrow(df)-1)){
for (j in 1:(ncol(df))){
dist_prop[(df[j,i]),2] = dist_prop[(df[j,i]),2]+df[nrow(df),j]
}
}

我查看了代码的不同部分,但根本找不到错误所在。它正在返回值,但它们太低了。

感谢您提供的任何帮助。

编辑:

很遗憾,我无法共享数据。但它是这种格式:

df = cbind(c(1,1,1,1,2,2,3), 
c(1,1,2,2,3,3,4),
c(1,2,3,3,3,3,4),
c(1,1,1,1,1,2,3)) # classes
df = data.frame(rbind(df, c(0.2, 0.8, 1.2, 0.4))) # distances

我的目标是通过对每个类的相应距离值求和来获得每个类占用的总距离。相反,它返回较低的值:1:6.4、2:2.4、3:1.6、4:0预期结果是以下文本的计算:

     column 1 column 2 column 3 column 4 TOTAL
[1,] "4*0.2" "2*0.8" "1*1.2" "5*0.4" "5.6"
[2,] "2*0.2" "2*0.8" "1*1.2" "1*0.4" "4.8"
[3,] "1*0.2" "2*0.8" "4*1.2" "1*0.4" "7"
[4,] "0*0.2" "1*0.8" "1*1.2" "0*0.4" "2"

我的目标是让代码返回 TOTAL

我希望这能稍微澄清一点,并提供一个像样的例子。我相信它符合最低限度、完整和可验证的标准,因为它似乎在我运行示例时重现了问题。

抱歉,总计 2 有误。现在更正。总计为类(class)总计(总计1=第1列1+第2列1+第3列1+第4列1)

最佳答案

如果我理解你的问题是对的,那么你正在对原始矩阵的每一列中的值 1、2、3 和 4 进行制表/计数。然后你用距离做矩阵乘法:

df0 <- cbind(c(1,1,1,1,2,2,3), c(1,1,2,2,3,3,4), c(1,2,3,3,3,3,4), c(1,1,1,1,1,2,3)) # classes
D <- c(0.2, 0.8, 1.2, 0.4) # distances
# apply(df0, 2, function(x) tabulate(x,4)) ## the counting
apply(df0, 2, function(x) tabulate(x,4)) %*% D
# > apply(df0, 2, function(x) tabulate(x,4)) %*% D
# [,1]
# [1,] 5.6
# [2,] 3.6
# [3,] 7.0
# [4,] 2.0

如果你想要一个向量:

c(apply(df0, 2, function(x) tabulate(x,4)) %*% D)
# > c(apply(df0, 2, function(x) tabulate(x,4)) %*% D)
# [1] 5.6 3.6 7.0 2.0

或者使用sweep()代替矩阵乘法:

rowSums(sweep(apply(df0, 2, function(x) tabulate(x,4)), 2, STATS=D, FUN='*'))
# > rowSums(sweep(apply(df0, 2, function(x) tabulate(x,4)), 2, STATS=D, FUN='*'))
# [1] 5.6 3.6 7.0 2.0

rowSums(apply(df0, 2, function(x) tabulate(x,4)) * rep(D, each=4))
# > rowSums(apply(df0, 2, function(x) tabulate(x,4)) * rep(D, each=4))
# [1] 5.6 3.6 7.0 2.0

关于r - 简单的 R 命令不返回所有值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50679826/

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