数据 table 和任意函数
Data table and any function
我有 3 个变量(world
、place
和 group
)。有 3 组:1,2 和 3。如果任何一组观察值具有 place==1
的观察值,那么我想将那个 group
的所有观察值标记为 TRUE
。我一直在尝试使用函数 any
和内部数据 table 加入 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?
我会为此使用 dplyr
:
df.new <- df2 %>%
group_by(group) %>%
mutate(tf = any(place == 1))
这应该将整个组标记为 TRUE
或 FALSE
。
您可能还需要
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
我有 3 个变量(world
、place
和 group
)。有 3 组:1,2 和 3。如果任何一组观察值具有 place==1
的观察值,那么我想将那个 group
的所有观察值标记为 TRUE
。我一直在尝试使用函数 any
和内部数据 table 加入 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?
我会为此使用 dplyr
:
df.new <- df2 %>%
group_by(group) %>%
mutate(tf = any(place == 1))
这应该将整个组标记为 TRUE
或 FALSE
。
您可能还需要
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