使用单个命令过滤列并选择最后一行

时间:2019-03-15 19:05:32

标签: r data.table

我想过滤data.table,然后在单个命令中选择过滤后的data.table的最后一行。该命令的期望结果是一个数字,因为我正在公式中使用该过滤表达式的最后一行。

我想避免在过滤data.table然后在另一行中选择.N时定义一个新变量。

这可能吗?

谢谢!

library(data.table)
library(magrittr)

# Sample data
dt <- data.table(style = c(rep("A", times = 10),
                           rep("B", times = 10)),
                 id = 1:20)

# Want to select last row when dt is filtered for style == "A"
5 * dt[style == "A" & .N, id]
#>  [1]  5 10 15 20 25 30 35 40 45 50

# Desired output is 50

# Want to avoid defining previously
a <- dt[style == "A"] %>% 
  .[.N, id]

5 * a
#> [1] 50

reprex package(v0.2.1)于2019-03-15创建

2 个答案:

答案 0 :(得分:4)

您可以使用j中的x[i, j]选择与i中的过滤器匹配的最后一个元素:

dt[style == "A", id[.N]]
# or
dt[style == "A", last(id)]

答案 1 :(得分:0)

使用dplyr

dt %>%
  group_by(style) %>%
  summarise(id = last(id) * 5)
# A tibble: 2 x 2
  style    id
  <chr> <dbl>
1 A        50
2 B       100