【问题标题】:dplyr calculating difference between values in first column based on sequence in second columndplyr根据第二列中的序列计算第一列中的值之间的差异
【发布时间】:2017-05-16 12:31:00
【问题描述】:
age_member<- c(1975, 1980, 1979, 1985, 1993, 1998)
people<- c("male", "female", "male", "female", "male", "children") 

dataset <- data.frame(age_member, people)  

我的结果:

age_member    people
1975      male          
1980    female          
1979    male            
1985    female          
1993    male            
1998    children

我正在过滤这个序列男性(第一),女性(第二),根据 akrun 的回答 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))

【问题讨论】:

  • 没问题,没有那个也可以得到输出,请看下面我的解决方案

标签: r dplyr


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-13
    • 2017-02-17
    • 1970-01-01
    • 2015-12-06
    • 1970-01-01
    相关资源
    最近更新 更多