根据其他结果创建一个新列

时间:2020-07-27 19:47:56

标签: r dataframe dplyr

df <- data.frame("ref" = c("A","A","B","B","C","C","C"),
                 "trans" = c("R","MTA","N","MTA","MTA","MTA","MTA"))

  ref trans
1   A     R
2   A   MTA
3   B     N
4   B   MTA
5   C   MTA
6   C   MTA
7   C   MTA

我想创建一个新列,为每个引用选择值“ R”或“ N”,并为每一行重复该值。如果不存在值“ R”或“ N”,则该列到处都应该简单地具有值“ N”。

我尝试过这样的事情:

df %>% group_by (ref,trans) %>% arrange(desc(ref), desc(trans)) %>% mutate(result = trans[1L])

但不起作用。 (请注意,分组依据是必填项,因为我的数据集更精细)。

结果应该是

  ref trans result
1   A     R      R
2   A   MTA      R
3   B     N      N
4   B   MTA      N
5   C   MTA      N
6   C   MTA      N
7   C   MTA      N

最好使用dplyr解决方案

2 个答案:

答案 0 :(得分:2)

case_when中使用mutate将适用于您提供的示例。尽管有ref"R"的{​​{1}}没有?

"N"

答案 1 :(得分:1)

可以尝试:

library(dplyr)

df %>%
  group_by(ref) %>%
  mutate(result = c('N', 'R')[any(trans == 'R') + 1])

输出:

# A tibble: 7 x 3
# Groups:   ref [3]
  ref   trans result
  <fct> <fct> <chr> 
1 A     R     R     
2 A     MTA   R     
3 B     N     N     
4 B     MTA   N     
5 C     MTA   N     
6 C     MTA   N     
7 C     MTA   N  
相关问题