大家好我想在R中的数据框中创建一个新变量,但我的代码ifelse()
不起作用。我的数据框F
具有下一个结构(我在最后一部分中包含dput()
版本):
ID rama2
1 1 7
2 2 16
3 3 1
4 4 7
5 5 16
6 6 16
7 7 7
8 8 9
9 9 1
10 10 7
11 11 16
12 12 7
13 13 13
14 14 20
15 15 7
16 16 9
17 17 3
18 18 3
19 19 9
20 20 20
21 21 NA
22 22 4
23 23 0
24 24 0
25 25 0
26 26 0
27 27 0
28 28 0
29 29 0
30 30 0
31 31 0
32 32 0
考虑到这种情况,我正在尝试计算新的变量名rama_act1
:
1.如果rama2
等于1 rama_act1
等于1。
2.如果rama2
等于0 rama_act1
等于NA。
3.如果rama2
等于NA,则rama_act1
等于0。
4. rama2
中不同的1(除0)的值也等于0.
我在考虑这些条件的情况下使用ifelse编写代码但出了点问题:
z$rama_act1=ifelse(z$rama2==1,1,
ifelse(z$rama2==0,NA,0))
我不知道发生了什么,因为这不适用于rama2
NA
的{{1}}。
我使用最后一个代码得到了这个结果:
ID rama2 rama_act1
1 1 7 0
2 2 16 0
3 3 1 1
4 4 7 0
5 5 16 0
6 6 16 0
7 7 7 0
8 8 9 0
9 9 1 1
10 10 7 0
11 11 16 0
12 12 7 0
13 13 13 0
14 14 20 0
15 15 7 0
16 16 9 0
17 17 3 0
18 18 3 0
19 19 9 0
20 20 20 0
21 21 NA NA
22 22 4 0
23 23 0 NA
24 24 0 NA
25 25 0 NA
26 26 0 NA
27 27 0 NA
28 28 0 NA
29 29 0 NA
30 30 0 NA
31 31 0 NA
32 32 0 NA
第21行出现错误,我不知道为什么我的代码不考虑它。我想得到这样的东西:
ID rama2 rama_act1
1 1 7 0
2 2 16 0
3 3 1 1
4 4 7 0
5 5 16 0
6 6 16 0
7 7 7 0
8 8 9 0
9 9 1 1
10 10 7 0
11 11 16 0
12 12 7 0
13 13 13 0
14 14 20 0
15 15 7 0
16 16 9 0
17 17 3 0
18 18 3 0
19 19 9 0
20 20 20 0
21 21 NA 0
22 22 4 0
23 23 0 NA
24 24 0 NA
25 25 0 NA
26 26 0 NA
27 27 0 NA
28 28 0 NA
29 29 0 NA
30 30 0 NA
31 31 0 NA
32 32 0 NA
我认为我的代码正在考虑NAs
,但它失败了。我的数据框的dput()
版本是下一个:
structure(list(ID = 1:32, rama2 = c(7, 16, 1, 7, 16, 16, 7, 9,
1, 7, 16, 7, 13, 20, 7, 9, 3, 3, 9, 20, NA, 4, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0)), .Names = c("ID", "rama2"), row.names = c(1L,
2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 11L, 12L, 13L, 14L, 15L,
16L, 17L, 18L, 19L, 20L, 101L, 500L, 34309L, 39982L, 40735L,
41019L, 44463L, 44464L, 44465L, 44480L, 44481L, 44482L), class = "data.frame")
提前感谢您的帮助。
答案 0 :(得分:2)
改写:
也许(这)
transform(dat,rama_act1=ifelse(is.na(rama2), 0,
ifelse(rama2==1,1,
ifelse(rama2==0,NA,0))))
答案 1 :(得分:2)
问题是NA
无法比较:
ifelse(1==NA, 0, 1)
## [1] NA
要修复,请专门检查NA
:
z$rama_act1=ifelse(!is.na(z$rama2) & z$rama2==1,1,
ifelse(z$rama2==0,NA,0))