【发布时间】:2017-05-22 16:25:21
【问题描述】:
我有 3 个变量(world、place 和 group)。有 3 个组:1,2 和 3。如果任何组观察结果都带有 place==1 的观察结果,那么我想将 group 的所有观察结果标记为 TRUE。我一直在尝试使用函数any 和内部数据表连接J,但它没有奏效。谁能解释一下为什么以及怎么做?
预期输出:第 2 组没有观察到 place == 1,所以 place1_group 应该是 FALSE。其他组应将place1_group 设为TRUE。
df2 <-structure(list(world = structure(c(1L, 2L, 3L, 3L, 3L, 5L, 1L,
4L, 2L, 4L), .Label = c("AB", "AC", "AD", "AE", "AF"), class = "factor"),
place = c(1, 1, 2, 2, 3, 3, 1, 2, 3, 1),
group = c(1,1, 1, 2, 2, 2, 3, 3, 3, 3)), .Names = c("world", "place","group"), row.names = c(NA, -10L), class = "data.frame")
df2 <- data.table(df2)
setDT(df2)
setkey(df2, group)
# Two step approach
df2[,place1:=FALSE][place==1,place1:= TRUE]
df2[,place1_group := FALSE][any(place1), place1_group := TRUE, by = group] # Not working, place1_group TRUE for all but it should be FALSE for group==2
# Inside join approach
df2[,test := "No place 1"][J(any(place1),by=group),test:="Yes Place 1", by=group] # Why it does not work for group 3?
【问题讨论】:
-
在上面的代码中,您将
any放在i参数中,而不是j参数中。