在数据帧中从因子变量的前几行中创建新列

时间:2019-05-28 14:41:57

标签: r

给出这样的数据框:

game     team
zap.che  zap
zap.che  che
zap.che  zap
zap.che  zap
zap.che  che
bar.var  bar
bar.var  var
bar.var  var
bar.var  bar
bar.var  bar

我想添加另一个新列,这是我想要的结果,如下所示:

game     team    poss
zap.che  zap     1
zap.che  che     1
zap.che  zap     2
zap.che  zap     2
zap.che  che     2
bar.var  bar     1
bar.var  var     1
bar.var  var     1
bar.var  bar     2
bar.var  bar     2

我的目的是: a)为“团队”列中所有连续出现的相同值分配相同的值 b)在“ poss”列中计数所有包装的“ team”值(1、2、3,依此类推) c)一旦在“游戏”列中更改了值,重新启动相同的过程

2 个答案:

答案 0 :(得分:0)

一种选择是按“游戏”分组,然后根据“团队”的第一级获取游程长度ID,并将fill的{​​{1}}元素与先前的非NA元素

NA

数据

library(dplyr)
library(tidyr)
library(data.table)
df1 %>% 
    group_by(game = factor(game, levels = unique(game))) %>%
    mutate(poss = as.integer(factor(rleid(team != first(team)) *
          NA^(team != first(team))))) %>% 
   fill(poss)
# A tibble: 10 x 3
# Groups:   game [2]
#   game    team   poss
#   <fct>   <chr> <int>
# 1 zap.che zap       1
# 2 zap.che che       1
# 3 zap.che zap       2
# 4 zap.che zap       2
# 5 zap.che che       2
# 6 bar.var bar       1
# 7 bar.var var       1
# 8 bar.var var       1
# 9 bar.var bar       2
#10 bar.var bar       2

答案 1 :(得分:0)

我们可以创建一个新列,表示数据帧的row_number()group_by gameteam,并在连续{{ 1}}大于1。

diff