gpt4 book ai didi

r - 如何有条件地选择每组中的一行/行?

转载 作者:行者123 更新时间:2023-12-04 12:32:37 25 4
gpt4 key购买 nike

样本数据:

tmp_dt <-
data.table(grp = rep(c(1,2), each = 5), a = 1:10)

# > tmp_dt
# grp a
# 1: 1 1
# 2: 1 2
# 3: 1 3
# 4: 1 4
# 5: 1 5
# 6: 2 6
# 7: 2 7
# 8: 2 8
# 9: 2 9
# 10: 2 10

我知道我可以使用 .SD 为每个组获取行的子集:

tmp_dt[, .SD[c(2,3)], by = grp]
# grp a
# 1: 1 2
# 2: 1 3
# 3: 2 7
# 4: 2 8

我无法使用 data.table 通过 grp 有条件地对行进行子集化。比如我希望等价于下面的dplyr代码:

tmp_dt %>%
group_by(grp) %>%
filter(if_else(grp == 1, row_number() == 3, row_number() == 2)) %>%
ungroup

# A tibble: 2 × 2
# grp a
# <dbl> <int>
# 1 1 3
# 2 2 7

最佳答案

data.table 中,你可以这样做:

tmp_dt[tmp_dt[, .I[if(grp == 1) 3 else 2], grp]$V1]

# grp a
#1: 1 3
#2: 2 7

注意 data.table 中的 group 变量是长度为 1 的向量(与其他变量不同),因此可以避免使用效率低于 ifelse如果/否则:

tmp_dt[, length(grp), grp]

# grp V1
#1: 1 1
#2: 2 1

关于r - 如何有条件地选择每组中的一行/行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44771544/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com