2017-04-10 32 views
1

私は以下のデータフレームを持っています。Rのデータフレームの条件付き減算

ID Year  
A 2001 
A 2002 
A 2003 
B 2009 
B 2010 

私は、対応するIDの最小年を年に差し引いて追加する第3列を作成したいと考えています。要するに

、私はこれを持っているしたいと思います:

ID Year New 
A 2001 1 
A 2002 2 
A 2003 3 
B 2009 1 
B 2010 2 

私はRとdplyrとhaventはにはかなり新しいですループなし..

は事前にありがとうございますことを行う方法を見つけました

+0

私は 'group_by'と' mutate'機能を見てみたいdplyr'あなたは '使用しているので。 '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) 
関連する問題