将新列添加到 R 数据框,这是 any() 在另一列上的结果

问题描述 投票:0回答:2

我正在尝试使用 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))
r logical-operators mutate
2个回答
1
投票

我们可以用

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(.)) 

0
投票

要遵循您的语法,您需要在

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

library(dplyr)

groupMap %>% rowwise() %>% mutate(Allow = any(unlist(allowed)))
© www.soinside.com 2019 - 2024. All rights reserved.