我正在尝试使用 mutate 根据包含 TRUE/FALSE 向量的列中是否存在任何 TRUE 创建一个新列。
鉴于示例代码,我希望看到“允许”列包含(FALSE、TRUE、TRUE、TRUE、TRUE、FALSE)。我得到的都是 TRUE。
library(dplyr)
GroupName <- c("Mayfair", "Chronos", "Orion", "Milkhouse", "Saddle", "Westeros")
Region <- c("A12", "S19", "T12", "T11", "S16", "B2")
GroupAssociation <- data.frame(GroupName, Region)
regID <- c("S", "T1")
groupMap <- GroupAssociation
groupMap$allowed <- lapply(groupMap$Region, stringr::str_starts, regID)
groupMap <- mutate(groupMap, Allow = any(unlist(groupMap$allowed) == TRUE))
我们可以用
list
遍历 sapply
并应用 any
而不是 unlist
整个列表
groupMap$Allow <- sapply(groupMap$allowed, any)
或者用
tidyverse
,可以是map_lgl
library(dplyr)
library(purrr)
groupMap %>%
mutate(Allow = map_lgl(allowed, any))
或者在新版本的
purrr
中,在list_c
ping之后使用
map
groupMap %>%
mutate(Allow = map(allowed, any) %>%
list_c(.))
要遵循您的语法,您需要在
rowwise()
之前添加mutate
。在 mutate
命令中,您不需要使用 $
语法来引用列,只需列名即可。此外,any(... == TRUE)
是多余的,因为 any
本身已经测试了任何 TRUE 值。
library(dplyr)
groupMap %>% rowwise() %>% mutate(Allow = any(unlist(allowed)))