r - 如何找到满足条件的组的第一个元素

标签 r dplyr

structure(list(group = c(17L, 17L, 17L, 18L, 18L, 18L, 18L, 19L, 
19L, 19L, 20L, 20L, 20L, 21L, 21L, 22L, 23L, 24L, 25L, 25L, 25L, 
26L, 27L, 27L, 27L, 28L), var = c(74L, 49L, 1L, 74L, 1L, 49L, 
61L, 49L, 1L, 5L, 5L, 1L, 44L, 44L, 12L, 13L, 5L, 5L, 1L, 1L, 
4L, 4L, 1L, 1L, 1L, 49L), first = c(0, 0, 1, 0, 1, 0, 0, 0, 1, 
0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0)), .Names = c("group", 
"var", "first"), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-26L))

使用前两列的数据,我想创建第三列(称为 first ),其中 first == 1仅当 var == 1第一次在一个小组中。换句话说,我想标记 group 中的第一个元素那个满足var == 1 .我怎么能在 dplyr 中做到这一点?当然group_by应该使用,但接下来呢?

最佳答案

library(dplyr)

df$first = NULL

df %>%
  group_by(group) %>%
  mutate(first = as.numeric(row_number() == min(row_number()[var == 1]))) %>%
  ungroup()

# # A tibble: 26 x 3
#   group   var first
#   <int> <int> <dbl>
# 1    17    74     0
# 2    17    49     0
# 3    17     1     1
# 4    18    74     0
# 5    18     1     1
# 6    18    49     0
# 7    18    61     0
# 8    19    49     0
# 9    19     1     1
# 10   19     5     0
# # ... with 16 more rows

这个想法是标记最小行号,其中 var = 1,在每个组内。

这将返回一些警告,因为在某些组中没有 var = 1 例。

另一种选择是这样的:
library(dplyr)

df$first = NULL

# create row id
df$id = seq_along(df$group)

df %>%
  filter(var == 1) %>%                         # keep cases where var = 1
  distinct(group, .keep_all = T) %>%           # keep distinct cases based on group
  mutate(first = 1) %>%                        # create first column
  right_join(df, by=c("id","group","var")) %>% # join back original dataset
  mutate(first = coalesce(first, 0)) %>%       # replace NAs with 0
  select(-id)                                  # remove row id

# # A tibble: 26 x 3
#   group   var first
#   <int> <int> <dbl>
# 1    17    74     0
# 2    17    49     0
# 3    17     1     1
# 4    18    74     0
# 5    18     1     1
# 6    18    49     0
# 7    18    61     0
# 8    19    49     0
# 9    19     1     1
#10    19     5     0
# # ... with 16 more rows

关于r - 如何找到满足条件的组的第一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52342744/

相关文章:

sql-server - R:使用 ODBC 和 SQL Server 读取性能非常慢

r - 计算数据帧的每一行与另一个数据帧中的所有其他行之间的欧几里得距离

r - 牺牲最小分辨率来汇总数据(根据滞后值的总和创建不同大小的组)

r - 如何减少以不包含 NA 的特定变量为条件的大量矩阵

r - 在 R 中的 ggplot2 中操作数据点的值

r - lubridate with_tz 不与 dplyr group_by 一起工作

regex - 在 R 中重新格式化抓取的日期

r - 加入极线ggplot图中的间隙

r - 临时安装R软件包,仅适用于当前 session

r - Shiny 的应用程序中的多个 group_by