【问题标题】:Summing R Matrix ignoring NA's求和 R 矩阵忽略 NA
【发布时间】:2014-12-02 17:02:45
【问题描述】:

我有以下声明按限制计数数据(三角形):

claims=matrix(c(2019,690,712,NA,773,574,NA,NA,232),nrow=3, byrow=T) 

执行以下类似于 Excel 的 sumif() 的简单事情的最优雅方法是什么:

  1. 将矩阵放入as.data.frame(),列名:“100k”、“250k”、“500k”
  2. 对除第一行以外的所有数字求和; (在这种情况下,总计 773,574 和 232)。我正在寻找一个简洁的参考,以便我可以轻松地将符号推广到更大的声明三角形。

对所有数字求和,忽略 NA。 sum(claims, na.rm = T) - 感谢 Gregor 的建议。 *我玩了一下ChainLadder 包,很喜欢它处理三角形数据的方式,尤其是在绘制和计算链接比率方面。我更普遍地想知道基本的 R 是否足以进行一些快速而肮脏的sumif() 或成对链接比率类型的计算?如果有人能说出一些智慧的话,这对我来说将是一个奖励。

谢谢!

【问题讨论】:

  • ?sum,注意可以设置na.rm = T
  • @akrun 谢谢,它有效。
  • @Actuary 查看一些“sumif”示例的编辑。

标签: r matrix sum dataframe


【解决方案1】:
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 是否足以进行一些快速而肮脏的sumif() 或成对链接比率类型的计算?”,至少对于sumif 评论,我想起了fortunes::fortune(286)

...这有点像问“你的 Land Rover 会弥补我的车道吗?”,但我认为这个问题是认真的。

sum 将你给它的任何数字加起来。基于逻辑的子集非常简单,不需要单独的sumif 函数。假设你有x = rnorm(100)y = runif(100)

# 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)]

我不知道成对链接比率是多少,但我愿意打赌 base R 可以轻松处理它。

【讨论】:

  • 真的很感谢这篇文章,我确实从你的例子中学到了东西。在其中,您使用了 x, y - 它们是数据框名称吗?我假设示例 3 用于以下情况:x=matrix(sample(9),nrow=3);y=matrix(sample(9),nrow=3);sum(x[x&gt;5&amp;y&gt;3])?在这种情况下,y 几乎可以像排序的逻辑指标矩阵一样工作,请让我知道这是否是您的示例的意思?
  • 在我的示例中,xy 只是向量,可以是矩阵的行或列,也可以是数据帧的列。 (定义x 后运行is(x) 以查看有关它的详细信息。)是的,当您使用布尔运算符时,您正在将向量转换为逻辑指标。在我的示例中,您可以运行方括号 inside 的内容来查看,例如:x &gt; 0y &lt; 0.5x &gt; 0 &amp; y &lt; 0.5。第四个示例说明了“回收”,T, F 模式在x 的整个长度内被回收。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-26
  • 2012-10-17
  • 2016-08-01
相关资源
最近更新 更多