2017-04-10 38 views
1

我有以下數據幀。R中的數據幀中的條件減法

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

由於您使用'dplyr'我看看了'group_by'和'mutate'功能。 'group_by'會將你的數據框分成幾組,mutate中的調用將獨立執行。 – Benjamin

+0

在基礎R中,'df $ New < - ave(df $ Year,df $ ID,FUN = seq_along)'將起作用。 – lmo

回答

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

使用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) 
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)