簡體   English   中英

R-基於其他列和行的絕對差的累積和

[英]R - Cumulative sum of absolute differences based on other column and row

我的數據具有以下格式:

  • 第一列:指示機器是否正在運行
  • 第二列:坐標以指示機器運行的距離

請參閱下面的數據集:

structure(c("", "", "running", "running", "running", "running", 
"running", "running", "running", "", "504", "678", "268", "475", 
"675", "796", "745", "693", "665", "488"), .Dim = c(10L, 2L), .Dimnames = list(
    NULL, c("e", "f")))

我想添加第三列,以給出機器已經運行的總距離(通過添加自機器開始運行以來的所有絕對差值)。 請參閱以下所需的輸出:

   e         f     Output
 [1,] ""        "504" ""    
 [2,] ""        "678" ""    
 [3,] "running" "268" "0"   
 [4,] "running" "475" "207" 
 [5,] "running" "675" "407" 
 [6,] "running" "796" "528" 
 [7,] "running" "745" "579" 
 [8,] "running" "693" "631" 
 [9,] "running" "665" "659" 
[10,] ""        "488" "" 

我試圖用R編寫一些代碼來以一種優雅的方式來獲得它,但是目前我的編程技能太有限了。 有誰知道解決這個問題的方法嗎? 預先謝謝您!

其實我不得不承認我沒有完全理解你的問題。

你的意思是這樣嗎?

a <- c("", "", "running", "running", "running", "running", 
  "running", "running", "running", "", "504", "678", "268", "475", 
  "675", "796", "745", "693", "665", "488")

a <- data.frame(matrix(a, ncol=2), stringsAsFactors=FALSE)
a[,2] <- as.numeric(a[,2])

subs.a <- subset(a, X1=='running')
abs(diff(subs.a$X2))
cumsum(diff(subs.a$X2))

這回來

  abs(diff(subs.a$X2)) 
  [1] 207 200 121  51  52  28
  cumsum(abs(diff(subs.a$X2)))
  [1] 207 407 528 579 631 659

將其插入到data.frame

a[a$X1=='running', 'CumSum'] <- c(0,cumsum(abs(diff(subs.a$X2))))

這為您提供了所需的數據幀:

df <- data.frame(structure(c("", "", "running", "running",     "running",     "running", 
        "running", "running", "running", "", "504", "678", "268", "475", 
        "675", "796", "745", "693", "665", "488"), .Dim = c(10L, 2L), .Dimnames = list(
          NULL, c("e", "f"))), stringsAsFactors = F)

runs <- df$e == "running"

df$f <- as.numeric(df$f)
diff <- abs(diff(df$f[runs]))
df$Output[runs] <- 0
df$Output[runs][-1] <- cumsum(diff)

你得到:

         e   f Output
1          504     NA
2          678     NA
3  running 268      0
4  running 475    207
5  running 675    407
6  running 796    528
7  running 745    579
8  running 693    631
9  running 665    659
10         488     NA

暫無
暫無

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

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