根据r中特定行上方和下方的值使用值构建新列
考虑任何长格式的数据帧(每行是一个测量点) col1表示参与者(这里只有两个人,A和B)。col2用1表示在该测量点发生了事件(即,它表示状态变化,例如从单身变为已婚) 现在,我想创建一个变量,该变量对于事件之前的所有测量点为0,对于事件发生的测量点为1,对于所有后续测量点也为1根据r中特定行上方和下方的值使用值构建新列,r,R,考虑任何长格式的数据帧(每行是一个测量点) col1表示参与者(这里只有两个人,A和B)。col2用1表示在该测量点发生了事件(即,它表示状态变化,例如从单身变为已婚) 现在,我想创建一个变量,该变量对于事件之前的所有测量点为0,对于事件发生的测量点为1,对于所有后续测量点也为1 col1 col2 col3 row.name11 A 0 0 row.name12 A 0 0 row.name13 A 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
;下面是一个使用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数据。表
解决方案
df[, cummax(col2), by = col1]
其中:
df <- data.frame(
col1 = c("A", "A", "A", "A", "B", "B", "B"),
col2 = c(0L, 1L, 0L, 0L, 0L, 0L, 1L)
)
df我还有一个问题与此相关。你介意再帮我一次吗@玛丽。不客气。总是考虑通过在答案旁边设置绿色检查来结束问题。我还发布了你新问题的答案。请看一看。
df[, cummax(col2), by = col1]
df <- data.frame(
col1 = c("A", "A", "A", "A", "B", "B", "B"),
col2 = c(0L, 1L, 0L, 0L, 0L, 0L, 1L)
)