2017-05-16 11 views
1
age_member<- c(1975, 1980, 1979, 1985, 1993, 1998) 
people<- c("male", "female", "male", "female", "male", "children") 

dataset <- data.frame(age_member, people) 

私の結果をもとcreati:私は子供の私が欲しいもの(第2)dplyrは、2番目の列に配列に

、(最初の)男性のような他の配列を保っておりませんdplyr : filter a sequence of rows (in one column)
に答えます年齢差の新しい列(mutate

dataset %>% 
    filter(first(people)=="male", last(people) == "female", n()==2) 

期待される結果

age_member people ages_diff 
1975 male   5 
1980 female   NA 
1979 male   6 
1985 female   NA 

私が試したもの:

dataset2 <-dataset %>% 
    mutate(ifelse(first(people)=="male", last(people) == "female",n()==2), last(age)- first(age)) 
+0

んが、問題をしてくださいしようとすることはできません私の解決策を確認してください – akrun

答えて

1

我々は、我々は出力を得ることができ、また、そのせずに、

library(dplyr) 
dataset %>% 
     group_by(ind = cumsum(people == "male")) %>% 
     filter(first(people)=="male", last(people) == "female", n()==2) %>% 
     mutate(ages_diff = c(diff(age_member), NA)) %>% 
     ungroup() %>% 
     select(-ind) 
# A tibble: 4 x 3 
# age_member people ages_diff 
#  <dbl> <fctr>  <dbl> 
#1  1975 male   5 
#2  1980 female  NA 
#3  1979 male   6 
#4  1985 female  NA 
+1

それはグレーt! – Wilcar