r - 构建新列,其值取决于 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
你有什么建议吗?非常感谢!
解决方案
您正在寻找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)