考虑下面的命名向量x.

( x <- setNames(c(1, 2, 0, NA, 4, NA, NA, 6), letters[1:8]) )
# a  b  c  d  e  f  g  h 
# 1  2  0 NA  4 NA NA  6 

我想计算x的累积和,而忽略NA个值.许多R函数都有一个参数na.rm,它在计算之前删除了NA个元素.cumsum()不是其中之一,这使得这个操作有点棘手.

我可以这样做.

y <- setNames(numeric(length(x)), names(x))
z <- cumsum(na.omit(x))
y[names(y) %in% names(z)] <- z
y[!names(y) %in% names(z)] <- x[is.na(x)]
y
# a  b  c  d  e  f  g  h 
# 1  3  3 NA  7 NA NA 13 

但这似乎太过分了,并且产生了很多新的作业(job)/副本.我相信有更好的办法.

What better methods are there to return the cumulative sum while effectively ignoring NA values?

推荐答案

你想要这样的东西吗:

x2 <- x
x2[!is.na(x)] <- cumsum(x2[!is.na(x)])

x2

[编辑]或者,根据上面的 comments ,您可以将NA更改为0-

miss <- is.na(x)
x[miss] <- 0
cs <- cumsum(x)
cs[miss] <- NA
# cs is the requested cumsum

R相关问答推荐

如何正确使用' programme::programme_bar$Message()'?

如何使用行政边界形状文件中的人口普查数据调整格栅数据集中的人口数据

使用map()内的公式()创建多个公式

DT::可数据的正规表达OR运算符问题

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

单击 map 后,将坐标复制到剪贴板

如何删除R中除某些特定名称外的所有字符串?

矩阵%*%矩阵中的错误:需要数字/复杂矩阵/向量参数

如何在一次运行中使用count进行多列计数

在数组索引上复制矩阵时出错

在R gggplot2中是否有一种方法将绘图轴转换成连续的 colored颜色 尺度?

R-按最接近午夜的时间进行筛选

以字符格式导入的ExcelElectron 表格日期列标题

我如何go 掉盒子图底部的数字?

R+reprex:在呈现R标记文件时创建可重现的示例

如何将一些单元格的内容随机 Select 到一个数据框中?

将摘要图添加到facet_WRAP gglot的末尾

使用ggplot2中的sec_axis()调整次轴

如果满足条件,则替换列的前一个值和后续值

在不重复主题的情况下重新排列组