簡體   English   中英

計算 R 中滿足條件的最后一行

[英]Count last rows that meet a criteria in R

我正在嘗試制作一個計數器來添加符合條件的最后一行。 當不滿足此標准時,計數器必須停止。

讓我解釋:

拿這個df

df = data.frame(a = c(1,4,3,6,5,3,5,6,2,6,7,1,4,5,7),
                b = c(1,5,5,4,8,5,1,4,8,1,5,4,8,7,6),
                c = c(4,5,5,8,6,1,4,8,5,5,1,5,1,4,7))

我只想對最后幾行中滿足x > 3的值求和:

在此處輸入圖像描述

所以,結果必須是:

在此處輸入圖像描述

我編寫了一個代碼來執行此操作,但速度很慢:

df = data.frame(a = c(1,4,3,6,5,3,5,6,2,6,7,1,4,5,7),
                b = c(1,5,5,4,8,5,1,4,8,1,5,4,8,7,6),
                c = c(4,5,5,8,6,1,4,8,5,5,1,5,1,4,7))



df_with_results = data.frame("a" = NA,
                             "b" = NA,
                             "c" = NA)

n_line = 0
count = 0


for(i in 1:ncol(df)){ #loop for each column

  for(k in 0:nrow(df)){ #loop for each row

    
    if(df[(nrow(df)-k), i] > 3) {
      
      count = count + 1
      
      
    } else {
      
      break
      
    }
  
  }
  
  df_with_results[1,i] = count
  
  count = 0 #column change
  
}

有小費嗎?

謝謝

我們可以在這里使用rle

library(dplyr)
sapply(df, \(x) with(rle(x > 3), last(lengths)[last(values)])[1])
a b c 
3 5 2 

單程:

df = data.frame(a = c(1,4,3,6,5,3,5,6,2,6,7,1,4,5,7),
                b = c(1,5,5,4,8,5,1,4,8,1,5,4,8,7,6),
                c = c(4,5,5,8,6,1,4,8,5,5,1,5,1,4,7))

sapply(df, \(x) match(T, rev(x) <= 3, length(x) + 1) - 1)
#> a b c 
#> 3 5 2

其它的辦法:

sapply(df, \(x) sum(cumprod(rev(x)>3)))

暫無
暫無

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

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