2017-10-21 42 views
0

我試圖創建一個新的列有條件地基於其他幾列。這是我的數據。我正在嘗試創造一年的差異列。計算列在其他列的條件r

> person <- c(rep("A", 4), rep("B", 1), rep("C",3), rep("D",1)) 
> score <- c(1,1,2,4,1,1,2,2,3) 
> year <- c(2017, 2016, 2015, 2014, 2015, 2017, 2015, 2014, 2017) 

此功能會找上一年度的數據針對此人,並從他們目前的得分得分。如果沒有前一年的數據,則返回NA。所以對於我的數據,我會得到一個新的列「差異」,其值爲0,-1,-2,NA,NA,NA,0,NA,NA。

很想看到dplyr的答案,但香草解決方案歡迎。

回答

2

通過使用dplyr

library(dplyr) 
df %>% 
    arrange(person, year) %>% 
    group_by(person) %>% 
    mutate(per = ifelse(year - lag(year) == 1, score - lag(score), NA)) %>% 
    arrange(person, -year) 

# A tibble: 9 x 4 
# Groups: person [4] 
    person score year per 
    <fctr> <dbl> <dbl> <dbl> 
1  A  1 2017  0 
2  A  1 2016 -1 
3  A  2 2015 -2 
4  A  4 2014 NA 
5  B  1 2015 NA 
6  C  1 2017 NA 
7  C  2 2015  0 
8  C  2 2014 NA 
9  D  3 2017 NA 
+0

介意通過語法走我?給一個男人一條魚vs教一個男人去釣魚.... – AZhao

+0

@AZhao哪一部分困惑了你? – Wen

+2

@AZhao意識到,你是一個Python用戶,所以我的解釋開始從蟒蛇R, 的r =滯後的Python shift' 的r = GROUP_BY Python的groupby' 的r = ifesle Python的np.where' 的r arrange = Python sort_values' – Wen