簡體   English   中英

循環並減去R中的兩列

[英]Loop through and subtract two columns in R

我有一個看起來像這樣的df:

 Year Subscribers Forecast AbsError
1 2006    23188171        0        0
2 2007    28745769        0        0
3 2008    34880964        0        0
4 2009    46373266        0        0

我有一個蓋在預測列中的活字,然后應該從預測值中減去訂戶值,然后將該數字放入AbsError列中,如下所示:

 Year   Subscribers    Forecast     AbsError
1 2006    23188171     9680000       13508171
2 2007    28745769     27960000      46240000
3 2008    3488096      46240000      11359036

我的循環如下所示: for (i in 1:nrow(new.phone)) { new.phone$Forecast[i] <- ((1.828e+07 )*new.phone$Year[i]) + (-3.666e+10) new.phone$AbsError <- abs((new.phone$Subscribers[i] - new.phone$Forecast[i])) }

盡管此循環給出了正確的預測值,但給出了不正確的AbsError值,但我不知道原因。 所有的AbsError值都是10464033,但這是錯誤的。 任何想法為什么會這樣?

謝謝您的幫助!

您不需要for循環即可執行此操作。 這可以滿足您的需求:

new.phone$Forecast <- ((1.828e+07) * new.phone$Year) + (-3.666e+10)
new.phone$AbsError <- abs(new.phone$Subscribers - new.phone$Forecast)

您只是在循環的第二行中缺少索引。 應該是: new.phone$AbsError[i] <- [...]不是new.phone$AbsError <- [...]

無論如何,您可以跳過所需的循環:

new.phone$Forecast <- (1.828e+07) * new.phone$Year + (-3.666e+10) 
new.phone$AbsError  <- abs(new.phone$Subscribers - new.phone$Forecast)

new.phone
  Year Subscribers Forecast AbsError
1 2006    23188171  9680000 13508171
2 2007    28745769 27960000   785769
3 2008    34880964 46240000 11359036
4 2009    46373266 64520000 18146734

在dplyr中嘗試以下操作:

require(dplyr)

k <- read.table(text = "Year Subscribers Forecast AbsError
1 2006    23188171        0        0
2 2007    28745769        0        0
3 2008    34880964        0        0
4 2009    46373266        0        0")

k%>%mutate(Forecast = ((1.828e+07 )*Year) + (-3.666e+10) )%>%
  mutate(AbsError = abs(Subscribers-Forecast))

結果:

Year Subscribers Forecast AbsError
1 2006    23188171  9680000 13508171
2 2007    28745769 27960000   785769
3 2008    34880964 46240000 11359036
4 2009    46373266 64520000 18146734

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM