根据已有的数据添加新列

时间:2018-01-04 13:42:06

标签: r

我的数据看起来像这样

DF

    df = data.frame(
    id = c(1,1,1,1,1,2,2,2),
    value = c('a','b','c','d','e','a','b','c'))


    ------------
    id      value
    ------------
    1       a
    ------------
    1       b
    ------------
    1       c
    ------------
    1       d
    ------------
    1       e
    ------------
    2       a
    ------------
    2       b
    ------------
    2       c
    ------------

现在我想根据看起来像这个

的值添加一个新列
    ---------------------------
    id      value   from    to
    ---------------------------
    1       a       a       e
    ---------------------------
    1       b       a       e
    ---------------------------
    1       c       a       e
    ---------------------------
    1       d       a       e
    ---------------------------
    1       e       a       e
    ---------------------------
    2       a       a       c
    ---------------------------
    2       b       a       c
    ---------------------------
    2       c       a       c
    ---------------------------

我不知道答案是否已经可用,如果已有,请提供链接

2 个答案:

答案 0 :(得分:3)

您可以使用avehead(第一个)和tail(最后一个),即。

df$from <- with(df, ave(value, id, FUN = function(i)head(i, 1)))

#and

df$to <- with(df, ave(value, id, FUN = function(i)tail(i, 1)))

使用data.table

library(data.table)

setDT(df)[, c('from', 'to') := list(data.table::first(value), data.table::last(value)), by = id][]

答案 1 :(得分:2)

使用dplyr的另一种解决方案:

library(dplyr)

df %>% 
group_by(id) %>%
mutate(from = first(value), to = last(value)) 

id  value     from   to
1      a      a      e
1      b      a      e
1      c      a      e
1      d      a      e
1      e      a      e
2      a      a      c
2      b      a      c
2      c      a      c