【问题标题】:Data table and any function数据表和任何功能
【发布时间】:2017-05-22 16:25:21
【问题描述】:

我有 3 个变量(worldplacegroup)。有 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 参数中。

标签: r datatable any


【解决方案1】:
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

【讨论】:

  • 为什么是最后的链括号?它们是什么意思?
  • @user3507584 他们打印结果。
【解决方案2】:

我会为此使用dplyr

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

这应该将整个组标记为TRUEFALSE

你可能还需要

df.new <- data.table(df.new)

【讨论】:

  • 这可行,但我选择了 data.table 之一,因为我认为它更短/更好的编程。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-30
  • 1970-01-01
相关资源
最近更新 更多