求和R矩阵忽略NA';s

求和R矩阵忽略NA';s,r,matrix,sum,dataframe,R,Matrix,Sum,Dataframe,我有以下按限额列出的索赔计数数据(三角形): claims=matrix(c(2019,690,712,NA,773,574,NA,NA,232),nrow=3, byrow=T) 做以下类似Excel的sumif()的简单事情,最优雅的方法是什么 将矩阵放入as.data.frame()中,列名称为:“100k”、“250k”、“500k” 除第一行外的所有数字总和;(在这种情况下,求和773574和232)。我正在寻找一个简洁的参考,这样我就可以很容易地将符号推广到更大的索赔三角形 将所

我有以下按限额列出的索赔计数数据(三角形):

claims=matrix(c(2019,690,712,NA,773,574,NA,NA,232),nrow=3, byrow=T) 
做以下类似Excel的
sumif()
的简单事情,最优雅的方法是什么

  • 将矩阵放入
    as.data.frame()
    中,列名称为:“100k”、“250k”、“500k”
  • 除第一行外的所有数字总和;(在这种情况下,求和773574和232)。我正在寻找一个简洁的参考,这样我就可以很容易地将符号推广到更大的索赔三角形
  • 将所有数字相加,忽略NA<代码>金额(索赔,na.rm=T)-感谢Gregor的建议。 *我对ChainLadder软件包玩了一会儿,喜欢它如何处理三角形数据,特别是在绘制和计算链接比率时。我更一般地想知道,基本R是否足以进行一些快速而肮脏的
    sumif()
    或成对链接比率之类的计算?如果有人能说出一些智慧的话,这对我来说将是一个奖励

    谢谢大家!

    claims=matrix(c(2019,690,712,NA,773,574,NA,NA,232),nrow=3, byrow=T) 
    claims.df = as.data.frame(claims)
    names(claims.df) <- c("100k", "250k", "500k")
    # This isn't the best idea because standard column names don't start with numbers
    # If you go non-standard, you'll have to always quote them, that is
    claims.df$100k   # doesn't work
    claims.df$`100k` # works    
    
    # sum everything
    sum(claims, na.rm = T)
    
    # sum everything except for first row
    sum(claims[-1, ], na.rm = T)
    

    我不知道什么是成对链接比率,但我愿意打赌基数R可以很容易地处理它。

    看看
    ?sum
    ,注意你可以设置
    na.rm=t
    @akrun谢谢,它很有效。@精算师看到了一些“sumif”示例的编辑。非常感谢你的写作,我肯定从你的示例中学到了。在它们中,您使用了x,y-它们是数据帧名称吗?我假设示例3用于如下情况:
    x=matrix(示例(9),nrow=3);y=基质(样品(9),nrow=3);总和(x[x>5&y>3])
    ?在这种情况下,
    y
    几乎像某种逻辑指示符矩阵一样工作,请告诉我这是否是您的示例的意思?在我的示例中,
    x
    y
    只是向量,可以是矩阵的行或列,也可以是数据帧的列。(定义
    x
    run
    is(x)
    后,可以查看有关它是什么的许多详细信息。)是的,当使用布尔运算符时,就是将向量转换为逻辑指示符。在我的示例中,您可以运行方括号内的内容来查看,例如:
    x>0
    y<0.5
    x>0&y<0.5
    。第四个示例说明了“回收”,在整个
    x
    长度内回收
    T,F
    模式。
    # sum x if x > 0
    sum(x[x > 0])
    
    # sum x if y < 0.5
    sum(x[y < 0.5])
    
    # sum x if x > 0 and y < 0.5
    sum(x[x > 0 & y < 0.5])
    
    # sum every other x
    sum(x[c(T, F)]
    
    # sum all but the first 10 and last 10 x
    sum(x[-c(1:10, 91:100)]