使用排名(R)处理并列情况

4

我正在尝试创建虚拟变量,用于判断一个孩子是否是第一胎,以及是否是第二胎。我的数据看起来像这样:

ID   MID   CMOB   CYRB      
1    1     1      1991
2    1     7      1989
3    2     1      1985
4    2     11     1985
5    2     9      1994
6    3     4      1992
7    4     2      1992
8    4     10     1983

使用ID = 子ID,MID = 母亲ID,CMOB = 出生月份和CYRB = 出生年份。

对于第一个出生的虚拟数据,我尝试使用以下内容:

Identifiers_age <- Identifiers_age %>% group_by(MPUBID) 
                          %>% mutate(first = as.numeric(rank(CYRB) == 1))

但是似乎没有一种方法可以通过另一列的排名来打破并列(显然在这种情况下,所需的列是 CMOB),每当我尝试使用 "ties.method" 参数时,它告诉我输入必须是一个字符向量。

我错过了什么吗?

2个回答

4

order 在这里可能更方便使用,来自 ?order

order 返回一个排列,将其第一个参数按升序或降序重新排列,并通过其他参数进一步打破平局。

Identifiers_age <- Identifiers_age %>% group_by(MID) %>% 
                   mutate(first = as.numeric(order(CYRB, CMOB) == 1))
Identifiers_age

#Source: local data frame [8 x 5]
#Groups: MID [4]

#     ID   MID  CMOB  CYRB first
#  <int> <int> <int> <int> <dbl>
#1     1     1     1  1991     0
#2     2     1     7  1989     1
#3     3     2     1  1985     1
#4     4     2    11  1985     0
#5     5     2     9  1994     0
#6     6     3     4  1992     1
#7     7     4     2  1992     0
#8     8     4    10  1983     1

1
如果我们仍然想使用rank,我们可以将'CYRB'和'CMOB'转换为'Date',对其进行rank操作,然后根据逻辑向量获取二进制输出。
Identifiers_age %>%
         group_by(MID) %>% 
         mutate(first = as.integer(rank(as.Date(paste(CYRB, CMOB, 1,
                  sep="-"), "%Y-%m-%d"))==1))
#     ID   MID  CMOB  CYRB first
#  <int> <int> <int> <int> <int>
#1     1     1     1  1991     0
#2     2     1     7  1989     1
#3     3     2     1  1985     1
#4     4     2    11  1985     0
#5     5     2     9  1994     0
#6     6     3     4  1992     1
#7     7     4     2  1992     0
#8     8     4    10  1983     1

或者我们可以使用算术来使用 rank 进行操作。
Identifiers_age %>% 
         group_by(MID) %>%
         mutate(first = as.integer(rank(CYRB + CMOB/12)==1))
#     ID   MID  CMOB  CYRB first
#   <int> <int> <int> <int> <int>
#1     1     1     1  1991     0
#2     2     1     7  1989     1
#3     3     2     1  1985     1
#4     4     2    11  1985     0
#5     5     2     9  1994     0
#6     6     3     4  1992     1
#7     7     4     2  1992     0
#8     8     4    10  1983     1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接