如何解决如何将 if_else 和 grepl 函数的组合应用于 R 中的选定列?
经过 2 天的搜索,我希望得到一些帮助。
我有一个数据框,它代表了将近 20,000 个用户(行)和他们添加到的 Twitter 列表的名称(第 5 列:197)。请查看图片以了解我的数据框。
我的目标是重新编码表格,或者更准确地说是第 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):
如何在不复制/粘贴代码 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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。