【发布时间】:2021-05-22 00:07:40
【问题描述】:
我有一个大数据集,使用 R 中的 Data.Table 包。一个变量称为 Visa_status,另一个是 Master_status。两个变量都可以采用以下值:1、3、4、5 或 NA。我想按照以下逻辑将它们组合在一个名为 mv_status 的变量中: 如果两个变量的值为 NA,则值为 9。如果其中一个变量为 1,则值为 1。任何其他组合为 2。 我的代码是这样的
dataset[ , mv_status08 := ifelse( is.na(Master_status) & is.na(Visa_status), 9,
ifelse(Master_status == 1 | Visa_status == 1, 1, 2))]
我的输出是这样的:
Visa_status Master_status mv_status08 N
1: 1 1 1 164946
2: NA NA 9 6120
3: 1 NA 1 16590
4: 1 5 1 58
5: NA 1 1 775
6: 4 4 2 218
7: 4 3 2 8
8: 5 NA NA 85
9: 5 5 2 364
10: 3 3 2 271
11: 5 1 1 30
12: 3 1 1 8
13: 3 4 2 12
14: 4 NA NA 81
15: 4 1 1 35
16: NA 5 NA 14
17: 3 NA NA 101
18: 1 4 1 15
19: 4 5 2 2
20: NA 3 NA 72
21: NA 4 NA 20
22: 1 3 1 1
23: 5 3 2 4
24: 3 5 2 4
25: 5 4 2 2
Visa_status Master_status mv_status08 N
当变量之一中有 NA 时,为什么我会得到 NA?我的代码的最后一步不应该解决这个问题吗?
【问题讨论】:
-
没有。那是因为
Master_status == 1 | Visa_status == 1有 3 个值,一个TRUE, FALSE, NA。所以当TRUE它返回1,当FALSE它返回2,当NA它返回NA -
您检查两列是否为
NA,而不是任一列。 -
仅供参考,如果您使用的是
data.table,请使用其fifelse代替base::ifelse。或者,使用dplyr::if_else,两者都对非原子向量更具弹性,并且是类安全的,其中base::ifelse将高兴地(a)从其值中剥离类,并且(b)不尝试总是返回相同的值如果参数不明确则分类。 -
如果您在当前-
NA行中提供您期望的值,那么给您一个确定的答案会更容易。
标签: r dplyr data.table