我想过滤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创建
答案 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