Fish_ID Instance Success First_Success
1 0 0 0
1 1 0 0
1 2 1 1
1 3 0 0
1 4 1 0
1 5 0 0

我有一个包含列"Fish_ID"、"Instance"和"Success"的数据框,我想创建一个列"First_Success",仅在第一次成功时包含1,否则 for each FISH_ID组包含0.在实际数据中,我有不止一个Fish_ID. 我想出了这个代码:

mydata %>%
  group_by(fish_ID) %>%
  mutate(Fist_Success = ifelse(Success == 1, 1, 0))

但在此代码中,它计算等于1的所有Success值,我只想让它只对"First_Success"列的第一次成功计算为1,而在同一FISH_ID组中其余的值为0.如有任何建议,我将不胜感激.非常感谢!

推荐答案

您可以使用cumsum():

library(dplyr)

df %>%
  mutate(First_Success = +(Success & cumsum(Success) == 1),
         .by = Fish_ID)

#   Fish_ID Instance Success First_Success
# 1       1        0       0             0
# 2       1        1       0             0
# 3       1        2       1             1
# 4       1        3       0             0
# 5       1        4       1             0
# 6       1        5       0             0

@朗唐的建议也很棒:

df %>%
  mutate(First_Success = (cumsum(Success) == 1) * Success,
         .by = Fish_ID)

Data

df <- read.table(text =
"Fish_ID    Instance    Success
1   0   0
1   1   0
1   2   1
1   3   0
1   4   1
1   5   0", header = TRUE)

R相关问答推荐

按块将载体转换为矩阵-reshape

如何将具有重复名称的收件箱合并到R中的另一列中,而结果不同?

使用lapply的重新定位功能

查找满足SpatRaster中条件的单元格位置

以R为基数排列奇数个图

将复杂的组合列表转换为数据框架

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

如何计算前一行的值,直到达到标准?

如何在R中合并和合并多个rabrame?

使用tidy—select创建一个新的带有mutate的摘要变量

在R中使用数据集名称

使用范围和单个数字将数字与字符串进行比较

如何指定我的函数应该查找哪个引用表?

减go R中列表的所有唯一元素对

如何对r中包含特定(未知)文本的行求和?

使用R将简单的JSON解析为嵌套框架

使用来自嵌套列和非嵌套列的输入的PURRR:MAP和dplyr::Mariate

访问数据帧中未定义的列时出现R错误

如何在AER::ivreg中指定仪器?

将数据从一列转换为按组累计计数的单个虚拟变量