我的(样本)数据如下所示:
mydata <- structure(list(x1 = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 1L, 1L,
1L, 1L, 1L, 1L), x2 = c(1L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 3L, 1L,
2L, 3L, 4L, 4L), x3 = c(1L, 3L, 5L, 1L, 3L, 5L, 1L, 4L, 5L, 2L,
1L, 5L, 6L, 6L), week = c(0L, 0L, 0L, 0L, 0L, 0L, 1L, 30L, 50L,
22L, 52L, 36L, 25L, 26L), newar1 = c(0L, 0L, 2L, 0L, 0L, 2L,
0L, 0L, 0L, 0L, 0L, 0L, 0L, 1L), newvar2 = c(0L, 2L, 0L, 0L,
2L, 0L, 0L, 0L, 1L, 0L, 0L, 0L, 0L, 0L)), .Names = c("x1", "x2",
"x3", "week", "newar1", "newvar2"), class = "data.frame", row.names = c(NA,
-14L))
x1 x2 x3 week
0 1 1 0
0 2 3 0
0 3 5 0
0 1 1 0
0 2 3 0
0 3 5 0
1 1 1 1
1 2 4 30
1 3 5 50
1 1 2 22
1 2 1 52
1 3 5 36
1 4 6 25
1 4 6 26
我想创建 1 个新变量newvar1
:
如果 x1 = 0 => 我想计算整个数据集中 x1 等于 1 的次数(仅其他行,不包括自己的观察结果),但只计算具有相同 x2 和 x3 组合的行以及其中周数大于 24。
如果 x1 = 1 => 我想计算整个数据集中 x1 等于 1 的次数,但只计算 x2 和 x3 组合相同的行以及周数减去 25 大于零的行((第 25 周)> 0))。
“总和”是指如果条件成立,x1 等于 1 的次数。
“如果”我的意思是我只想在 if 之后的条件成立时对 x1 求和。基本上我的问题是:我怎样才能只根据条件对某些值求和?
我的数据应如下所示:
x1 x2 x3 week newvar1
0 1 1 0 0
0 2 3 0 0
0 3 5 0 2
0 1 1 0 0
0 2 3 0 0
0 3 5 0 2
1 1 1 1 0
1 2 4 30 0
1 3 5 50 1
1 1 2 22 0
1 2 1 52 0
1 3 5 36 0
1 4 6 25 0
1 4 6 26 1
目前我有以下代码,但这没有考虑到x2=x3
一周的限制。任何建议如何做到这一点?
mydata[,newvar1:=sum(x1), by=list(x2,x3)]