如何将 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)
找了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)