我的数据看起来像这样
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
---------------------------
我不知道答案是否已经可用,如果已有,请提供链接
答案 0 :(得分:3)
您可以使用ave
,head
(第一个)和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