【问题标题】:R mutate a column by group in ifelseR在ifelse中按组改变一列
【发布时间】:2021-09-06 08:30:12
【问题描述】:

我想改变 R data.table 中的一列。

这是我的数据示例。

df <- data.table(id=c(1,1,1,2,2,2,3,3,3), 
                 stopId=c("a","b","c","a","b","c","a","b","c"),
category=c(1,1,1,NA,NA,NA,2,2,2),
                 result = c('a','a','a','b','b','b','c','c','c'))

我的目标是使用if-else 命令创建一个列。 该列将是groupId group by id 的第一个值。

重点是在变异的时候,分组的值应该是一样的。

如果categoryNA,那么结果应该是groupId 的最后一个值。

这是我期待的结果。

   id groupId category result
1:  1       a        1      a
2:  1       b        1      a
3:  1       c        1      a
4:  2       a       NA      b
5:  2       c       NA      b
6:  2       b       NA      b
7:  3       c        2      c
8:  3       b        2      c
9:  3       a        2      c

如果您能帮助我,我将不胜感激。 谢谢!

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    data.table:

    df[,result:=fifelse(is.na(category),last(stopId),first(stopId)),by=id][]
    
       id stopId category result
    1:  1      a        1      a
    2:  1      b        1      a
    3:  1      c        1      a
    4:  2      a       NA      c
    5:  2      b       NA      c
    6:  2      c       NA      c
    7:  3      a        2      a
    8:  3      b        2      a
    9:  3      c        2      a
    

    【讨论】:

    • 感谢您的回答。这正是我想要的:)
    【解决方案2】:

    顾名思义,使用firstlast

    df %>%
      group_by(id) %>%
      mutate(resultt = ifelse(is.na(category), last(stopId), first(stopId)))
    
         id stopId category result resultt
      <dbl> <chr>     <dbl> <chr>  <chr>  
    1     1 a             1 a      a      
    2     1 b             1 a      a      
    3     1 c             1 a      a      
    4     2 a            NA b      b      
    5     2 c            NA b      b      
    6     2 b            NA b      b      
    7     3 c             2 c      c      
    8     3 b             2 c      c      
    9     3 a             2 c      c 
    

    您提供的数据与上面不同...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 2021-09-12
      • 1970-01-01
      相关资源
      最近更新 更多