首页 > 解决方案 > 构建新列,其值取决于 r 中特定行上方和下方的值

问题描述

考虑任何长格式的数据框(每一行是一个测量点)

            col1   col2
row.name11    A     0      
row.name12    A     1      
row.name13    A     0     
row.name14    A     0    
row.name15    B     0      
row.name16    B     0     
row.name17    B     1  

col1 表示参与者(这里只有 2 个人,A 和 B)。col2 用 1 表示在该测量点发生了事件(即,它表示状态变化,例如从单身到已婚)。

现在,我想为事件之前的所有测量点创建一个变量,该变量为 0,事件发生的测量点为 1,对于所有后续测量点也为 1。

             col1   col2  col3
row.name11    A     0     0 
row.name12    A     0     0
row.name13    A     1     1 
row.name14    A     0     1
row.name15    A     0     1
row.name16    B     0     0 
row.name17    B     0     0
row.name18    B     1     1

你有什么建议吗?非常感谢!

标签: r

解决方案


您正在寻找cumsum每组;这是一个基本的 R 解决方案,使用ave

transform(df, col3 = ave(col2, col1, FUN = cumsum))
#           col1 col2 col3
#row.name11    A    0    0
#row.name12    A    1    1
#row.name13    A    0    1
#row.name14    A    0    1
#row.name15    B    0    0
#row.name16    B    0    0
#row.name17    B    1    1

或者dplyr方式

library(dplyr)
df %>% group_by(col2) %>% mutate(col3 = cumsum(col2))

样本数据

df <- read.table(text =
    "            col1   col2
row.name11    A     0
row.name12    A     1
row.name13    A     0
row.name14    A     0
row.name15    B     0
row.name16    B     0
row.name17    B     1  ", header = T)

推荐阅读