将新列添加到R Dataframe 中,该列是另一列上any()的结果

vm0i2vca  于 2023-04-03  发布在  其他
关注(0)|答案(2)|浏览(112)

我尝试使用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))
bvhaajcl

bvhaajcl1#

我们可以使用sapply循环list,并对整个列表应用any而不是unlist

groupMap$Allow <- sapply(groupMap$allowed, any)

对于tidyverse,它可以是map_lgl

library(dplyr)
library(purrr)
groupMap %>%
   mutate(Allow = map_lgl(allowed, any))

或者在较新版本的purrr中,在ping map后使用list_c

groupMap %>% 
   mutate(Allow = map(allowed, any) %>%
   list_c(.))
dgsult0t

dgsult0t2#

要遵循语法,您需要在mutate之前使用rowwise()。在mutate命令中,您不需要使用$语法来引用列,只需列名即可。此外,any(... == TRUE)是多余的,因为any本身已经测试了任何TRUE值。

library(dplyr)

groupMap %>% rowwise() %>% mutate(Allow = any(unlist(allowed)))

相关问题