簡體   English   中英

越來越多地統計滿足某個條件的次數(R)

[英]Increasingly count the number of times that a certain condition is met (R)

我想知道如何越來越多地計算 data.frame 中的列滿足條件的次數。 讓我們考慮一個 data.frame,例如:

x hour count
1    0    NA
2    1    NA
3    2    NA
4    3    NA
5    0    NA
6    1    NA
...

我想要這個輸出:

x hour count
1    0     1
2    1    NA
3    2    NA
4    3    NA
5    0     2
6    1    NA
...

每次滿足條件hour==0count列都會增加 1。 有沒有一種聰明而有效的方法來執行此操作? 謝謝

您可以在hour == 0的行上使用seq_along

i <- x$hour == 0
x$count[i] <- seq_along(i)
x
#  x hour count
#1 1    0     1
#2 2    1    NA
#3 3    2    NA
#4 4    3    NA
#5 5    0     2
#6 6    1    NA

數據:

x <- structure(list(x = 1:6, hour = c(0L, 1L, 2L, 3L, 0L, 1L), count = c(NA, 
NA, NA, NA, NA, NA)), class = "data.frame", row.names = c(NA, 
-6L))

您可以使用cumsum來計算 0 出現的增量數量,並將hour值不為 0 的counts替換為NA

library(dplyr)
df %>%
  mutate(count = cumsum(hour == 0), 
         count = replace(count, hour != 0 , NA))

#  x hour count
#1 1    0     1
#2 2    1    NA
#3 3    2    NA
#4 4    3    NA
#5 5    0     2
#6 6    1    NA

數據

df <- structure(list(x = 1:6, hour = c(0L, 1L, 2L, 3L, 0L, 1L)), 
class = "data.frame", row.names = c(NA, -6L))

使用數據data.table

library(data.table)
setDT(df)[hour == 0, count := seq_len(.N)]
df
#   x hour count
#1: 1    0     1
#2: 2    1    NA
#3: 3    2    NA
#4: 4    3    NA
#5: 5    0     2
#6: 6    1    NA

數據

df <- structure(list(x = 1:6, hour = c(0L, 1L, 2L, 3L, 0L, 1L)), 
class = "data.frame", row.names = c(NA, -6L))

暫無
暫無

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

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