【问题标题】:finding and merging back last row in group查找并合并组中的最后一行
【发布时间】:2018-07-25 03:21:50
【问题描述】:

我可以使用 dplyr 查找数据集中的最后一行,并将该行的特定值合并回整个数据集。

data=data.frame(ID=c(rep(1,5),rep(2,5)), A=seq(1,10))
data=data %>% mutate(last_A=filter(.,row_number()==n())$A)

如何找到每个组的最后一行并将其合并回相应的组。我尝试了以下运行错误:

data=data %>% group_by(ID) %>% mutate(last_A=filter(.,row_number()==n())$A)

【问题讨论】:

  • 使用last-函数dplyr:data %>% group_by(ID) %>% mutate(lastA = last(A))
  • 感谢您解决了这个问题。但是,有没有办法将每个子组传递给变异?可以选择在 mutate 中传递一个将整个组作为输入的自定义函数?
  • 如果是data.table,您可以使用data[, lastA := A[.N], by = ID]

标签: r dplyr


【解决方案1】:

按照 Jaap 的建议,您可以使用 dplyr::last() 来回答您原来的问题。

library(dplyr)

data=data.frame(ID=c(rep(1,5),rep(2,5)), A=seq(1,10))

data %>% group_by(ID) %>% mutate(lastA = last(A))
#> # A tibble: 10 x 3
#> # Groups:   ID [2]
#>       ID     A lastA
#>    <dbl> <int> <int>
#>  1  1.00     1     5
#>  2  1.00     2     5
#>  3  1.00     3     5
#>  4  1.00     4     5
#>  5  1.00     5     5
#>  6  2.00     6    10
#>  7  2.00     7    10
#>  8  2.00     8    10
#>  9  2.00     9    10
#> 10  2.00    10    10

如果您想对每个子组做其他事情,我建议您开始一个新问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多