「魚、鳥、動物」などの文字列を含むフィールドを含むデータフレームがあります。それらをリストに折りたたんで、同じデータフレーム内に論理フィールドを作成するためにそれらを反復処理します。 更新:質問は、より精巧な例で更新されました。
ただし、これは遅く、最適とは言えません。何度もやらなければならない操作ではないので、それほど気になりませんでしたが、おそらくdplyrを使用して、より良い方法があると思います。
このコードは、フィールドitems内の my_list の各要素が一致するたびに新しいフィールドを作成します。
no <- seq(1:3)
items <- c('fish,cat,dog', 'horse,elephant,dog', 'hamster,pig')
df <- data.frame(no, items)
df$items <- as.character(df$items)
df
次のデータ フレームを作成します。
no items
1 1 fish,cat,dog
2 2 horse,elephant,dog
3 3 hamster,pig
このコードを実行すると、フィールド項目が収集され、論理フィールドに展開されます
items <- paste(df$items, collapse = ",")
item_list <- unlist(unique(strsplit(items, ",")))
for (i in 1:length(item_list)) {
lt <- item_list[i]
df <- df %>% rowwise() %>% mutate(!!lt := grepl(lt, items))
}
data.frame(df)
このデータフレームの結果:
no items fish cat dog horse elephant hamster pig
1 1 fish,cat,dog TRUE TRUE TRUE FALSE FALSE FALSE FALSE
2 2 horse,elephant,dog FALSE FALSE TRUE TRUE TRUE FALSE FALSE
3 3 hamster,pig FALSE FALSE FALSE FALSE FALSE TRUE TRUE