R中数据帧中的条件减法

时间:2017-04-10 15:26:17

标签: r dataframe dplyr

我有以下数据框。

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的新手,并没有找到没有循环的方法...

提前谢谢

3 个答案:

答案 0 :(得分:1)

dplyr中,您需要使用group_bymutate,如下所示:

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)