我有以下数据框。
ID Year
A 2001
A 2002
A 2003
B 2009
B 2010
我想创建第三列,其中我将相应ID的最小年份减去年份,然后添加一个。
简而言之,我想拥有这个:
ID Year New
A 2001 1
A 2002 2
A 2003 3
B 2009 1
B 2010 2
我是R和dplyr的新手,并没有找到没有循环的方法...
提前谢谢
答案 0 :(得分:1)
在dplyr
中,您需要使用group_by
和mutate
,如下所示:
df <- read.table(text = "ID Year
A 2001
A 2002
A 2003
B 2009
B 2010", header = T)
df <- df %>%
group_by(ID) %>%
mutate(New = Year - min(Year) + 1)
df
# ID Year New
# A 2001 1
# A 2002 2
# A 2003 3
# B 2009 1
# B 2010 2
答案 1 :(得分:1)
使用tidyverse:
library(tidyverse)
data <- tribble(~ID, ~year,
"A", 2001,
"A", 2002,
"A", 2003,
"B", 2009,
"B", 2010
)
data %>% group_by(ID) %>%
mutate(new = year - min(year)+1)
答案 2 :(得分:1)
使用ddply
:
library(plyr)
df<-data.frame(ID=c("A","A","A","B","B"), Year=c(2001,2002,2003,2009,2010))
ddply(df, .(ID), transform, New=Year-min(Year)+1)