2017-05-22 6 views

答えて

2

、我々はrow_number()

df2 %>% 
    group_by(ID) %>% 
    mutate(time2 = ifelse(row_number()==1, 0, time2)) 
# A tibble: 6 x 3 
# Groups: ID [2] 
#  ID time1 time2 
# <int> <int> <dbl> 
#1  1  0  0 
#2  1  0  1 
#3  1  1  5 
#4  2  0  0 
#5  2  1  3 
#6  2  3  5 

またはdata.tableを使用して論理状態に基づいてifelseを使用することができ、( 'ID' でグループ化された行のインデックス(.I)を作成し、割り当てます:=)0に行インデックスに対応する 'time2'の要素

library(data.table) 
setDT(df2)[df2[, .I[seq_len(.N)==1] , ID]$V1, time2 := 0][] 
# ID time1 time2 
#1: 1  0  0 
#2: 1  0  1 
#3: 1  1  5 
#4: 2  0  0 
#5: 2  1  3 
#6: 2  3  5 

やコンパクトbase Rオプションは( 'ID' のorder EDであると仮定して)だろう

df$time2[!duplicated(df$ID)] <- 0 
df 
# ID time1 time2 
#1 1  0  0 
#2 1  0  1 
#3 1  1  5 
#4 2  0  0 
#5 2  1  3 
#6 2  3  5 
3

またreplaceと組み合わせてdplyrを使用することができます。

df %>% 
    dplyr::group_by(ID) %>% 
    dplyr::mutate(time2 = replace(time2, 1, 0)) 
# Source: local data frame [6 x 3] 
# Groups: ID [2] 
# 
#  ID time1 time2 
# <int> <int> <dbl> 
# 1  1  0  0 
# 2  1  0  1 
# 3  1  1  5 
# 4  2  0  0 
# 5  2  1  3 
# 6  2  3  5 
+0

これは素晴らしいです! – Aramis7d

関連する問題