【发布时间】:2019-11-20 07:10:35
【问题描述】:
我有一个数据框,其中包含 Region、minage 和 maxage 列中的 if else 条件。请参阅下面的 df。
Seasoning Region minage maxage
1 mths:36-47 A 36 47
2 mths:24-35 A 24 35
3 mths:12-23 A 12 23
4 mths:36-47 B 36 47
5 mths:24-35 B 24 35
6 mths:12-23 B 12 23
我想在函数内以自动方式生成以下 IF ELSE 条件,因为我的实际数据集中有 40-50 多个条件。简而言之,我不想手动输入 if else 条件。 if 条件的格式 -
(seasoning >= minage) & (seasoning <= maxage) & (Region == value_Region_column)
功能
bx_is <- function(seasoning = NULL, Region = NULL) {
Bx = if ((seasoning >= 36) & (seasoning <= 47) & (Region == 'A')) {trans1}
else if ((seasoning >= 24) & (seasoning <= 35) & (Region == 'A')) {trans2}
else if ((seasoning >= 12) & (seasoning <= 23) & (Region == 'A')) {trans3}
else if ((seasoning >= 36) & (seasoning <= 47) & (Region == 'B')) {trans4}
else if ((seasoning >= 24) & (seasoning <= 35) & (Region == 'B')) {trans5}
else if ((seasoning >= 12) & (seasoning <= 23) & (Region == 'B')) {trans6}
return(data.matrix(Bx))
}
bx_is(seasoning=28, Region = 'B')
输入 Df
mx = structure(list(Seasoning = structure(c(3L, 2L, 1L, 3L, 2L, 1L
), .Label = c("mths:12-23", "mths:24-35", "mths:36-47"), class = "factor"),
Region = structure(c(1L, 1L, 1L, 2L, 2L, 2L), .Label = c("A", "B"), class = "factor"),
minage = c(36L, 24L, 12L, 36L, 24L, 12L), maxage = c(47L, 35L, 23L, 47L, 35L, 23L)),
class = "data.frame", row.names = c(NA, -6L))
注意 在上面显示的 bx_is( ) 函数中,trans1...trans6 是 6 个不同的矩阵。我想在 22M 迭代的循环中使用基于此函数条件的矩阵。 我无法应用过滤器,因为它需要一些处理并且在 22M 迭代中变慢。
【问题讨论】: