首页 > 解决方案 > 如何跨向量循环条件执行(多个 ifelse 场景)并为每个场景返回多个向量

问题描述

我有一个模拟数据集,我想在其中评估断点(经度)如何影响结果(东与西的指定)。

例如,以下代码行将根据经度列中的值是大于还是小于 -97 将 1 列修改为填充有“东”或“西”的数据框(标记区域)。

wnv$region <- ifelse(wnv$Longitude>-97, "East", "West")

最后,我想看看不同的阈值(不是 -97)如何影响数据集中的另一个变量。因此,我想遍历一个值向量——比如说breakpoints <- seq(-171, -70, 5)——并为断点序列中的每个值获取一个新向量(数据集中的列)。

您如何在循环中执行此操作,而不是为每个断点编写新的 ifelse 语句?

谢谢

标签: rloopsif-statementconditional-statements

解决方案


我已经为每个断点包含了不同的区域,以防万一。如果没有,只需删除and并将regions其替换为您想要的值。 regions[[k]][1]regions[[k]][2]

breakpoints <- c(-171, 70, 5)
col_names <- paste("gt_breakpoint", seq_along(breakpoints), sep = "_")
wnv <- data.frame(longitude = c(50, -99, 143, 90, 2, -8))
regions <- list(c("region1A", "region1B"), c("region2A", "region2B"),
                c("region3A", "region3B"))
for (k in (seq_along(breakpoints))) {
  wnv[[col_names[k]]] <- ifelse(wnv$longitude > breakpoints[k], regions[[k]][1],
                               regions[[k]][2])
}
wnv
#>   longitude gt_breakpoint_1 gt_breakpoint_2 gt_breakpoint_3
#> 1        50        region1A        region2B        region3A
#> 2       -99        region1A        region2B        region3B
#> 3       143        region1A        region2A        region3A
#> 4        90        region1A        region2A        region3A
#> 5         2        region1A        region2B        region3B
#> 6        -8        region1A        region2B        region3B

推荐阅读