我正在根据两位读者所说的确定最终年龄。我希望我的代码有条件地确定最终年龄:(1)如果两个年龄相同,最终年龄将采用agea,(2)如果两个年龄相差一年,最终年龄将是较低年龄,(3)如果这两个年龄相差两年,最终年龄将是平均年龄,(4)如果这两个年龄相差超过两年,那就是“一次性”。
它适用于大多数情况,但是当我有一个年龄为NA时,它只是给了我NA,我希望最终年龄变成非NA年龄。
这就是我的数据的样子,用逗号分隔列:
[1] age_a, age_k
[2] 6, 6
[3] 8, 7
[4] 6, 6
[5] 10, 10
[6] 6, 7
[7] 15, 6
[8] 13, NA
这是我的代码(“ka_ages”是我为rowMeans函数组合agea和agek创建的向量):
ka_final <- case_when(
agea == agek ~ agea,
abs(agek - agea) == 1 ~ pmin(agea, agek, na.rm = TRUE),
abs(agek - agea) == 2 ~ rowMeans(ka_ages),
abs(agek - agea) > 2 ~ NA_real_
)
现在代码运行时我的数据是什么样的:
[1] ka_final
[2] 6
[3] 7
[4] 6
[5] 10
[6] 6
[7] NA
[8] NA
所以,[7]是我想要的,但[8]不是 - 我希望它采用数字,而不是NA。这是正确的功能吗?
答案 0 :(得分:1)
由于最后一行中的age_k
为NA
,所有比较都会返回NA
,并且您的案例陈述不会返回任何内容(因此NA
)。
你需要在
的行中添加一个子句sum(is.na(c(agek, agea)))>0 ~ min(agek, agea, na.rm=TRUE)
最终案例陈述:
ka_final <- case_when(
agea == agek ~ agea,
abs(agek - agea) == 1 ~ pmin(agea, agek, na.rm = TRUE),
abs(agek - agea) == 2 ~ rowMeans(df),
abs(agek - agea) > 2 ~ NA_real_,
sum(is.na(c(agek, agea)))>0 ~ min(agek, agea, na.rm=TRUE)
)