我有一个看起来像这样的数据集:
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,我认为在获得正确的结果之后,这会更容易。
谢谢。
使用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