我正在try 创建变量,如果一个年龄组与一个间隔重叠,则设置为1,如果不是0(因为丢失值已成为我在发布时意识到的一个问题).我还没有找到堆栈上的相关示例,或者我能够重现的示例(参见下面的IVs/IRanges和遗漏的值).

以下是我的dput:

structure(list(`Est. Lower Age Range` = c(18, 18, 50, 50, 50, 
65, 18, 18, 18, 18, 65, 65, 65, 65, 65, 0.5, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 65, 65, 16, 16, 16, 16, 65, 65), `Est. Upper Age Range` = c(49, 
49, 64, 64, 64, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 65, NA, 
NA, NA, NA, NA, NA, NA, NA, 65, 65, NA, NA, NA, NA, 65, 65, NA, 
NA)), class = c("data.table", "data.frame"), row.names = c(NA, 
-34L), .internal.selfref = <pointer: 0x000002118266d280>)

我try 了几个包,包括IVS、GRIGN和IRanges,其中一个包不允许变量中包含值.我try 的基本编码如下:

Flag_Prep$`0-2` <- ifelse((Flag_Prep$`Est. Lower Age Range` > 0 & Flag_Prep$`Est. Lower Age Range` <= 2) |
                            (Flag_Prep$`Est. Upper Age Range` > 0 & Flag_Prep$`Est. Upper Age Range` <= 2),
                          1, 0)
Flag_Prep$`0-5` <- ifelse((Flag_Prep$`Est. Lower Age Range` > 0 & Flag_Prep$`Est. Lower Age Range` <= 5) |
                            (Flag_Prep$`Est. Upper Age Range` > 0 & Flag_Prep$`Est. Upper Age Range` <= 5),
                          1, 0)

Flag_Prep$`5-17` <- ifelse((Flag_Prep$`Est. Lower Age Range` >= 5 & Flag_Prep$`Est. Lower Age Range` < 18) |
                             (Flag_Prep$`Est. Upper Age Range` >= 5 & Flag_Prep$`Est. Upper Age Range` < 18),
                           1, 0)

Flag_Prep$`18-64` <- ifelse((Flag_Prep$`Est. Lower Age Range` >= 18 & Flag_Prep$`Est. Lower Age Range` < 65) |
                              (Flag_Prep$`Est. Upper Age Range` >= 18 & Flag_Prep$`Est. Upper Age Range` < 65),
                            1, 0)
Flag_Prep$`65+` <- ifelse(Flag_Prep$`Est. Lower Age Range` >= 65 | Flag_Prep$`Est. Upper Age Range` >= 65,
                          1, 0)

这将导致:

structure(list(`Est. Lower Age Range` = c(18, 18, 50, 50, 50, 
65, 18, 18, 18, 18, 65, 65, 65, 65, 65, 0.5, 16, 16, 16, 16, 
16, 16, 16, 16, 16, 16, 65, 65, 16, 16, 16, 16, 65, 65), `Est. Upper Age Range` = c(49, 
49, 64, 64, 64, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, 65, NA, 
NA, NA, NA, NA, NA, NA, NA, 65, 65, NA, NA, NA, NA, 65, 65, NA, 
NA), `0-2` = c(0, 0, 0, 0, 0, NA, NA, NA, NA, NA, NA, NA, NA, 
NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0, NA, NA, NA, 
NA, 0, 0, NA, NA), `0-5` = c(0, 0, 0, 0, 0, NA, NA, NA, NA, NA, 
NA, NA, NA, NA, NA, 1, NA, NA, NA, NA, NA, NA, NA, NA, 0, 0, 
NA, NA, NA, NA, 0, 0, NA, NA), `5-17` = c(0, 0, 0, 0, 0, NA, 
NA, NA, NA, NA, NA, NA, NA, NA, NA, 0, 1, 1, 1, 1, 1, 1, 1, 1, 
1, 1, NA, NA, 1, 1, 1, 1, NA, NA), `18-64` = c(1, 1, 1, 1, 1, 
NA, 1, 1, 1, 1, NA, NA, NA, NA, NA, 0, NA, NA, NA, NA, NA, NA, 
NA, NA, 0, 0, NA, NA, NA, NA, 0, 0, NA, NA), `65+` = c(0, 0, 
0, 0, 0, 1, NA, NA, NA, NA, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, 
NA, NA, NA, NA, 1, 1, 1, 1, NA, NA, 1, 1, 1, 1)), class = c("data.table", 
"data.frame"), row.names = c(NA, -34L), .internal.selfref = <pointer: 0x000002118266d280>)

如果一个年龄组跨越一个区间(例如5-17),我希望有一个1.目前,这适用于为几个组标记的0.5-17,但当有0.5-65时,只有2岁以下、5岁以下和65岁以上的人的变量为1,但中间的两个区间显示0.

从编码的Angular 来看,这是有意义的,但我对如何纠正这一点感到困惑.正如我上面提到的,我现在也意识到,我需要确定如何处理其中一个年龄段缺失的情况(他们应该缺失).

EDIT

我还需要指出的是,无论是否使用第一个NA行,以下代码都会导致错误

Flag_Prep$`5-17` <- NA

Flag_Prep$`5-17` <- ifelse((Flag_Prep$`Est. Lower Age Range` >= 5 & Flag_Prep$`Est. Lower Age Range` < 18) |
                             (Flag_Prep$`Est. Upper Age Range` >= 5 & Flag_Prep$`Est. Upper Age Range` < 18) |
                             (Flag_Prep$`Est. lower Age Range` < 5 & Flag_Prep$`Est. Upper Age Range` > 17),
                           1, 0)

# Error in `$<-.data.frame`(`*tmp*`, `5-17`, value = logical(0)) : 
#   replacement has 0 rows, data has 9584

推荐答案

只需稍微重新安排一下比较,您就可以设置(代码简化,因为Est. Lower Age Range是一个太长的变量名):

dt[is.na(upper), upper := lower]
dt[, c("0_2","0_5","5_17","18_64","65+") :=
       lapply(.(lower <= 2 & upper > 0,
         lower <= 5 & upper > 0,
         lower <= 17 & upper > 5,
         lower < 65 & upper >= 18,
         lower >= 65 | upper >= 65), as.integer)
]

这种方法之所以有效,是因为它确实有效!考虑所有六种情况--下限的部分匹配、上界的部分匹配、任意一种方式的完全匹配以及两端的不匹配:

        0       2
        |-------|

             |----|      - lower is <= 2, upper is > 0     = TRUE
     |----|              - lower is <= 2, upper is > 0     = TRUE
          |----|         - lower is <= 2, upper is > 0     = TRUE
    |--------------|     - lower is <= 2, upper is > 0     = TRUE
 |----|                  - lower is <= 2, upper is NOT > 0 = FALSE
                  |----| - lower is NOT <= 2, upper is > 0 = FALSE

R相关问答推荐

在R中使用GG Plot时如何 suppress 等值线图中的彩色条

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

手动打印线型gplot

根据文本字符串中的值粘贴新列

如何读取CSV的特定列时,给定标题作为向量

解析R函数中的变量时出现的问题

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

从服务器在Shiny中一起渲染图标和文本

Ggplot2中geom_tile的动态zoom

以字符格式导入的ExcelElectron 表格日期列标题

使用R中的dist()迭代ID匹配的欧几里德距离

函数可以跨多个列搜索多个字符串并创建二进制输出变量

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

自动STAT_SUMMARY统计与手动标准误差之间的差异

如何使用FormC使简单算术运算得到的数字是正确的?

如何为混合模型输出绘制不同的线型?

以任意顺序提取具有多个可能匹配项的组匹配项

使用geom_sf跨越日期线时的闭合边界

在生成打印的自定义函数中,可以通过变量将线型或 colored颜色 设置为NULL吗?

将每晚的平均值与每晚的值进行比较,统计是否有效?