计算R中连续的非NA项目

问题描述 投票:0回答:1

我有一个看起来像这样的数据集:

library(purrr)
library(dplyr) 
temp<-as.data.frame(cbind(col_A<-c(1,2,NA,3,4,5,6),col_B<-c(NA,1,2,NA,1,NA,NA)))
names(temp)<-c("col_A","col_B")
col_A      col_B
 1         NA           
 2         1           
 NA        2
 3         NA
 4         3
 5         NA
 6         NA

我想创建一个新的数据框,其中包含每一列的非NA项的计数。类似于以下示例:

count_A      count_B
 1           0           
 2           1           
 0           2
 1           0
 2           1
 3           0
 4           0

我正在努力获取物品的数量。我最近似的是:

count_days<-function(prev,new){
ifelse(!is.na(new),prev+1,0)
}

temp[,"col_A"] %>% 
mutate(count_a=accumulate(count_a,count_days))

但是出现以下错误:

Error in UseMethod("mutate_") : 
   no applicable method for 'mutate_' applied to an object of class "c('double', 'numeric')"

任何人都可以通过此代码帮助我,或者再给我一眼。

我知道这段代码只是尝试计算,而不是创建新的df,我认为在获得正确的结果之后,这会更容易。

谢谢。

r dplyr purrr
1个回答
0
投票

使用rle

res <- as.data.frame(lapply(lapply(temp, is.na), function(x) {
  r <- rle(x)
  s <- sapply(r$lengths, seq)
  s[r$values] <- lapply(s[r$values], `*`, 0)
  unlist(s)
}))
res
#   col_A col_B
# 1     1     0
# 2     2     1
# 3     0     2
# 4     1     0
# 5     2     1
# 6     3     0
# 7     4     0
© www.soinside.com 2019 - 2024. All rights reserved.