gpt4 book ai didi

r - 根据给定列的行总和对数据框进行子集化

转载 作者:行者123 更新时间:2023-12-01 23:28:01 24 4
gpt4 key购买 nike

我正在处理具有三个变量(即 ID、时间、性别)的数据。看起来像

df <-
structure(
list(
id = c(1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L),
time = c(21L, 3L, 4L, 9L, 5L, 9L, 10L, 6L, 27L, 3L, 4L, 10L),
gender = c(1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L)
),
.Names = c("id", "time", "gender"),
class = "data.frame",
row.names = c(NA,-12L)
)

也就是说,每个 id 有四个关于时间和性别的观察值。我想根据可变时间行的总和在 R 中对这些数据进行子集化,首先为每个 id 给出一个大于或等于 25 的值。请注意,对于 id 2,将包括所有观察结果,对于 id 3,仅涉及第一个观察结果。预期结果如下所示:

df <-
structure(
list(
id = c(1L, 1L, 1L, 2L, 2L, 2L, 2L, 3L ),
time = c(21L, 3L, 4L, 5L, 9L, 10L, 6L, 27L ),
gender = c(1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L)
),
.Names = c("id", "time", "gender"),
class = "data.frame",
row.names = c(NA,-8L)
)

非常感谢对此的任何帮助。

最佳答案

一个选项是使用 cumsumlag 作为:

library(dplyr)

df %>% group_by(id,gender) %>%
filter(lag(cumsum(time), default = 0) < 25 )

# # A tibble: 8 x 3
# # Groups: id, gender [3]
# id time gender
# <int> <int> <int>
# 1 1 21 1
# 2 1 3 1
# 3 1 4 1
# 4 2 5 0
# 5 2 9 0
# 6 2 10 0
# 7 2 6 0
# 8 3 27 1

使用data.table:(根据@Renu 的反馈更新)

library(data.table)

setDT(df)

df[,.SD[shift(cumsum(time), fill = 0) < 25], by=.(id,gender)]

关于r - 根据给定列的行总和对数据框进行子集化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49959117/

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