- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个数据框 (fbwb),在一组参与者中使用多项措施 (1-3) 对欺凌 (1-6) 进行多项评估。 df 看起来像这样:
fbwb <- read.table(text="id year bully1 bully2 bully3 cbully bully_ever
100 1 NA 1 NA 1 1
100 2 1 1 NA 1 1
100 3 NA 0 NA 0 1
101 1 NA NA 1 1 1
102 1 NA 1 NA 1 1
102 2 NA NA NA NA 1
102 3 NA 1 1 1 1
102 4 0 0 0 0 1
103 1 NA 1 NA 1 1
103 2 NA 0 0 0 1", header=TRUE)
其中 bully1、bully2 和 bully3 是二进制变量,如果在各自的度量中报告了欺凌行为,则每个变量都 = 1。cbully 是二进制的,如果给定年份的 3 个欺凌变量中的任何一个 = 1,则 cbully = 1。bully_ever 是二元的,如果针对给定参与者在任何一年的任何测量中报告了欺凌行为,则 = 1。
我想在我的 df 中创建一个名为 bully_past 的新二进制变量。 bully_past 表示过去一年中 cbully = 1 的情况。这与 bully_ever 略有不同。例如,如果参与者已被评估 4 次:
我已经尝试了很多东西,但最近的演绎如下:
fbwb <- fbwb %>%
dplyr::group_by(id) %>%
dplyr::mutate(bully_past = case_when(cbully == 1 & year == (year - 1) |
cbully == 1 & year == (year - 2) |
cbully == 1 & year == (year - 3) |
cbully == 1 & year == (year - 4) |
cbully == 1 & year == (year - 5) ~ 1,
(is.na(cbully) & year == (year - 1) &
is.na(cbully) & year == (year - 2) &
is.na(cbully) & year == (year - 3) &
is.na(cbully) & year == (year - 4) &
is.na(cbully) & year == (year - 5)) ~ NA_real_,
TRUE ~ 0)) %>%
dplyr::ungroup()
这不起作用,因为指示使用哪些年份的语法不正确 - 因此它生成一列 NA 值。我做了其他尝试,但我没能考虑到所有前几年的观察结果。
可以使用以下代码在 Stata 中完成:
gen bullyingever = bullying
sort iid time
replace bullyingever = 1 if bullying[_n - 1]==1 & iid[_n - 1]==iid
replace bullyingever = 1 if bullying[_n - 2]==1 & iid[_n - 2]==iid
replace bullyingever = 1 if bullying[_n - 3]==1 & iid[_n - 3]==iid
replace bullyingever = 1 if bullying[_n - 4]==1 & iid[_n - 4]==iid
replace bullyingever = 1 if bullying[_n - 5]==1 & iid[_n - 5]==iid
我感谢任何关于如何在 R 中完成此操作的输入,最好使用 dplyr。
最佳答案
在这里,我们可以编写一个辅助函数,它可以使用 cumsum
(保留事件的累积帐户,让您查看过去)和 lag()< 来查看以前的事件
以便专门查看当前值的后面。所以我们有
had_previous_event <- function(x) {
lag(cumsum(!is.na(x) & x==1)>0)
}
然后您可以将其与您的 dplyr
链一起使用
fbwb %>%
arrange(id, year) %>%
group_by(id) %>%
mutate(bully_past = had_previous_event(cbully))
这会返回 TRUE/FALSE,但如果您想要零/一,您可以将其更改为
mutate(bully_past = as.numeric(had_previous_event(cbully)))
关于r - 复杂的条件变异 : Create new variable with conditional mutating using only past observations for a given participant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415961/
我是一名优秀的程序员,十分优秀!