如何根据行的条件创建列

How to create a column based on conditions with rows

我遇到以下问题:

Shared_ID<-c(1,1,1,2,2,2,3,3,3,4,4,4,5,5,5)
Individual_ID<-c(11,12,13,21,22,23,31,32,33,41,42,43,51,52,53)
Individual_Con<-c(1,2,3,1,1,1,2,2,2,3,3,3,3,2,1)

table<-tibble(Shared_ID,Individual_ID,Individual_Con)
table

我正在寻找的是一种创建名为 Shared_Con 的新列的方法,其中:对于每个 Shared_ID 显示一个基于以下:

Individual_Con==1 ~ 1
Individual_Con==2 ~ 2
Individual_Con==3 ~ 3
any combination of Individual_Con ~ 4 

对我来说,这意味着如果 Shared_ID 中的所有 Individual_Con x.e 都等于 1,那么 Shared_Con 将是 1,最后一种情况是 如果每个 Shared_ID 至少有 2 个不同的 Individual_Con 那么 Shared_Con 将是 4

这是我想要的结果:

# A tibble: 15 x 4
   Shared_ID Individual_ID Individual_Con Shared_Con
       <dbl>         <dbl>          <dbl>      <dbl>
 1         1            11              1          4
 2         1            12              2          4
 3         1            13              3          4
 4         2            21              1          1
 5         2            22              1          1
 6         2            23              1          1
 7         3            31              2          2
 8         3            32              2          2
 9         3            33              2          2
10         4            41              3          3
11         4            42              3          3
12         4            43              3          3
13         5            51              3          4
14         5            52              2          4
15         5            53              1          4

我怎样才能轻松做到这一点?在此先感谢您的帮助!

我们可以通过 'Shared_ID' 进行分组,检查 'Individual_Con' 中不同元素的数量是否大于 1 然后 return 4 否则 return Individual_Con

library(dplyr)
table %>%
     group_by(Shared_ID) %>%
     mutate(Shared_Con = if(n_distinct(Individual_Con) > 1) 4 else Individual_Con)
# A tibble: 15 x 4
# Groups:   Shared_ID [5]
#   Shared_ID Individual_ID Individual_Con Shared_Con
#       <dbl>         <dbl>          <dbl>      <dbl>
# 1         1            11              1          4
# 2         1            12              2          4
# 3         1            13              3          4
# 4         2            21              1          1
# 5         2            22              1          1
# 6         2            23              1          1
# 7         3            31              2          2
# 8         3            32              2          2
# 9         3            33              2          2
#10         4            41              3          3
#11         4            42              3          3
#12         4            43              3          3
#13         5            51              3          4
#14         5            52              2          4
#15         5            53              1          4