如何将 if_else 和 grepl 函数的组合应用于 R 中的选定列?

How can I apply a combination of if_else and grepl function to selected columns in R?

找了2天,希望能得到帮助。

我有一个数据框,它代表近 20,000 个用户(行)和他们被添加到的 Twitter 列表的名称(5:197 列)。请查看图片以了解我的数据框。

我的目标是重新编码 table,或者更准确地说是第 5 列到第 197 列。如果列表名称包含某些关键字,我想用 1 覆盖文本,如果不是用 0。

我可以使用以下代码结合 if_else 和 grepl:

逐列完成
fashion_lists$X1 <- if_else(grepl("fashion|cloth|apparel|textile|material|garment|wardrobe|shoes|sneakers|footwear|sportswear|streetwear|
                              menswear|athleisure|hautecouture|hypebeast", fashion_lists$X1) & 
                        !grepl("rev|clean|vegan|warrior|sdg|capsule|worker|whomademyclothes|conscious|circular|slow|responsible|smart|
                               secondhand|sust|eco|organic|green|ethical|fair|environment|repurposed|upcycl|recycl|reus", fashion_lists$X1), 
                        1, 0)

此代码为我提供了我正在寻找的结果(参见 X1):

如何在没有 copy/pasting 我的代码 193 次的情况下对所有列执行此操作?我尝试将以上内容组合到一个应用函数中,但到目前为止没有任何效果。

非常感谢您的帮助!

我们可以尝试使用 lapply 语法,仅针对第 5 列到第 197 列。请注意,我在下面定义了一个辅助函数,并且我避免使用 ifelse,因为布尔结果可以简单地转换为 1 或 0 以获得您想要的行为。

func <- function(x) {
    as.numeric(grepl("fashion|cloth|apparel|textile|material|garment|wardrobe|shoes|sneakers|footwear|sportswear|streetwear|menswear|athleisure|hautecouture|hypebeast", x) &
               !grepl("rev|clean|vegan|warrior|sdg|capsule|worker|whomademyclothes|conscious|circular|slow|responsible|smart|secondhand|sust|eco|organic|green|ethical|fair|environment|repurposed|upcycl|recycl|reus", x))
}
cols <- names(fashion_lists)[5:197]
fashion_lists[cols] <- lapply(fashion_lists[cols], func)