如何基于第二个变量创建(整数或数字)变量,但条件是第三个变量具有许多AND&OR条件

问题描述 投票:0回答:1

我只是一个本科生,我为这个愚蠢的问题表示歉意,但是我真的无法继续复制在互联网上找到的文章。该代码在Stata中可用,但在R中不可用。

这里是Stata代码,每行都是第三个变量满足我的条件,所以我要创建的行仅导入第二个变量的值。

gen child_care_basic = tuactdur24 if
(tutier1code==3 & tutier2code ==1 & tutier3code==1) |   

[...]

我在R中尝试过的是:

timeuse_2003$CHILD_CARE_BASIC <- NA
timeuse_2003$CHILD_CARE_BASIC[(timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==1) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==1) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==8) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==9) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==11) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==12) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==99) |
                          (timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==3) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==1) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==8) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==9) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==1 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==4 & timeuse_2003$TUTIER2CODE==3 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==17 & timeuse_2003$TUTIER2CODE==3 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==17 & timeuse_2003$TUTIER2CODE==4 & timeuse_2003$TUTIER3CODE==10) |
                          (timeuse_2003$TUTIER1CODE==17 & timeuse_2003$TUTIER2CODE==4 & timeuse_2003$TUTIER3CODE==1)
                          ]<- timeuse_2003$TUACTDUR24 

问题是,我在整个专栏中只得到了NA。

再次,我为这样一个基本的问题表示歉意,但是我尝试了很多不同的方法,但是没有任何效果,所以我决定问你们那些不在初学者面前的人。

谢谢你。

Fabricio

r variables multiple-conditions
1个回答
0
投票

您可以按照以下模式来创建新列,并根据您的业务逻辑来创建值的子集。

timeuse_2003 = data.frame(
    TUACTDUR24 = c(10.1, 20.2, 30.3, 40.4, 50.5),
    TUTIER1CODE = c(3, 4, 3, 4, 3),
    TUTIER2CODE = c(1, 1, 1, 3, 3))

timeuse_2003

  TUACTDUR24 TUTIER1CODE TUTIER2CODE
1       10.1           3           1
2       20.2           4           1
3       30.3           3           1
4       40.4           4           3
5       50.5           3           3

selection = timeuse_2003$TUTIER1CODE==3 & timeuse_2003$TUTIER2CODE==1
timeuse_2003$CHILD_CARE_BASIC = NA
timeuse_2003$CHILD_CARE_BASIC[selection] = timeuse_2003$TUACTDUR24[selection]

timeuse_2003

  TUACTDUR24 TUTIER1CODE TUTIER2CODE CHILD_CARE_BASIC
1       10.1           3           1             10.1
2       20.2           4           1               NA
3       30.3           3           1             30.3
4       40.4           4           3               NA
5       50.5           3           3               NA
© www.soinside.com 2019 - 2024. All rights reserved.