数据 table 和任意函数

Data table and any function

我有 3 个变量(worldplacegroup)。有 3 组:1,2 和 3。如果任何一组观察值具有 place==1 的观察值,那么我想将那个 group 的所有观察值标记为 TRUE。我一直在尝试使用函数 any 和内部数据 table 加入 J 但它没有用。谁能解释为什么以及如何做?

预期输出:第 2 组没有观察到 place == 1,因此 place1_group 应该是 FALSE。其他组应该 place1_groupTRUE

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?

我会为此使用 dplyr

df.new <- df2 %>%
          group_by(group) %>%
          mutate(tf = any(place == 1))

这应该将整个组标记为 TRUEFALSE

您可能还需要

df.new <- data.table(df.new)
df2[,place1_group:=any(place==1),group][]
#     world place group place1_group
#  1:    AB     1     1         TRUE
#  2:    AC     1     1         TRUE
#  3:    AD     2     1         TRUE
#  4:    AD     2     2        FALSE
#  5:    AD     3     2        FALSE
#  6:    AF     3     2        FALSE
#  7:    AB     1     3         TRUE
#  8:    AE     2     3         TRUE
#  9:    AC     3     3         TRUE
# 10:    AE     1     3         TRUE