我想将第一个
TRUE
的位置保存在每个 level
内的 id
变量中。我正在做以下事情:
library(tibble)
library(knitr)
library(kableExtra)
library(tidyverse)
library(lme4)
library(multiwayvcov)
library(lmtest)
data <- data %>%
group_by(id) %>%
mutate(first_true = min(which(data$level == TRUE))) %>%
ungroup()
但是,
first_true
的结果对于所有 id
都是相同的。 group_by(id)
不起作用。知道会发生什么吗?
您没有提供数据来让我们重现您的问题,但我在这里提供了一些适合您的描述的内容:
data <- tribble(~id, ~level,
1, FALSE,
1, FALSE,
1, TRUE,
1, FALSE,
2, FALSE,
2, FALSE,
2, TRUE,
2, TRUE,
3, FALSE,
3, TRUE,
3, TRUE,
3, FALSE
)
在此示例中,我们创建一个列,其中包含每个 TRUE 值的位置,稍后,我们创建另一个列,其中每个 id 的 TRUE 值的位置较小。
result <- data |>
# add row numberd for each id
group_by(id) |>
mutate(position = row_number()) |>
# create column with the position of each TRUE value
mutate(true_position = ifelse(level == TRUE, position, NA)) |>
# create another column with the smaller position of each TRUE value
mutate(min_position = min(true_position, na.rm = TRUE))
您还可以过滤以仅获取每组的第一个 TRUE:
result |>
group_by(id) |>
filter(true_position == min(true_position, na.rm = TRUE))
# A tibble: 3 × 5
# Groups: id [3]
id level position true_position min_position
<dbl> <lgl> <int> <int> <int>
1 1 TRUE 3 3 3
2 2 TRUE 3 3 3
3 3 TRUE 2 2 2