我有一個類似的資料,如下所示:

dput(head(my.data[c("name", "categories")],1))
structure(list(name = "among us", categories = list(c("OnlinePvPLAN",
"PvPOnlineCo-opLAN", "Co-opCross-PlatformMultiplayerRemote",
"Playon", "PhoneRemotePlay", "onTablet]"))), row.names = 1L, class = "data.frame")
可以想象,這種結構并不容易處理。我想將該categories列分隔為多個邏輯列,如下所示:
name | OnlinePvPLAN | PvPOnlineCo-opLAN | MMOOnlinePvPOnline
-----|--------------|-------------------|-------------------- .....
among| TRUE | TRUE | FALSE
us
由于有很多類別列,我決定撰寫一個函式來撰寫將類別串列分開的函式。
使用以下代碼,我可以找到屬于特定類別的列:
filter(my.data, map_lgl(my.data$categories, ~"OnlinePvPLAN" %in% .))
使用它,我撰寫了以下函式:
compile.category.func <- function(data, category.list){
lapply(X=category.list, function(category){
category <- c(category)
mutate(data, category=ifelse(map_lgl(data$categories, ~category %in% .), TRUE, FALSE))
})
data
}
output <- compile.category.func(my.data, c("OnlinePvPLAN","MMOOnlinePvPOnline"))
但是,此功能不起作用并且不會生成任何新列。
uj5u.com熱心網友回復:
取消嵌套成長格式,使用 table 創建頻率,使用 mutate 轉換為 TRUE/FALSE,然后 as.data.frame.matrix 將其轉換為資料框,最后添加 name 列。如果需要 1/0,則省略 mutate 行。
library(dplyr)
library(tidyr)
library(tibble)
DF %>%
unnest_longer(categories) %>%
table %>%
as.data.frame.matrix %>%
mutate(across(, as.logical)) %>%
rownames_to_column("name")
給予
name Co-opCross-PlatformMultiplayerRemote OnlinePvPLAN onTablet]
1 among us TRUE TRUE TRUE
PhoneRemotePlay Playon PvPOnlineCo-opLAN
1 TRUE TRUE TRUE
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/383110.html
