总结R矩阵无视NA

时间:2014-12-02 17:02:45

标签: r matrix sum dataframe

我有以下索赔按限制计算数据(三角形):

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)。我正在寻找一个简洁的参考,所以我可以很容易地将符号概括为更大的索赔三角形。
  3. 将所有数字相加,忽略NA。 sum(claims, na.rm = T) - 感谢格雷戈尔的建议。 *我稍微使用了包ChainLadder,并享受它如何处理三角形数据,特别是在绘制和计算链接比率时。我更想知道基本的R是否足以做一些快速而肮脏的sumif()或成对链接比率计算?如果那里的任何人可以分发一些智慧的话,这对我来说是一个奖励。

    谢谢!

1 个答案:

答案 0 :(得分: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)

与一般建议相比,提出具体问题的具体建议要容易得多。至于&#34;我更想知道基本的R是否足以做一些快速而肮脏的sumif()或成对链接比率计算?&#34;至少对于sumif评论,我提醒过fortunes::fortune(286)

  

......这有点像问你的路虎会不会把我的车道弄到我的车道上?&#34;但是我会认真地问这个问题。

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

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