我有以下索赔按限制计算数据(三角形):
claims=matrix(c(2019,690,712,NA,773,574,NA,NA,232),nrow=3, byrow=T)
使用类似Excel sumif()
的以下简单方法,最优雅的方式是什么:
as.data.frame()
列名:“100k”,“250k”,“500k”将所有数字相加,忽略NA。 sum(claims, na.rm = T)
- 感谢格雷戈尔的建议。
*我稍微使用了包ChainLadder
,并享受它如何处理三角形数据,特别是在绘制和计算链接比率时。我更想知道基本的R是否足以做一些快速而肮脏的sumif()
或成对链接比率计算?如果那里的任何人可以分发一些智慧的话,这对我来说是一个奖励。
谢谢!
答案 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可以轻松处理它。