1

「魚、鳥、動物」などの文字列を含むフィールドを含むデータフレームがあります。それらをリストに折りたたんで、同じデータフレーム内に論理フィールドを作成するためにそれらを反復処理します。 更新:質問は、より精巧な例で更新されました。

ただし、これは遅く、最適とは言えません。何度もやらなければならない操作ではないので、それほど気になりませんでしたが、おそらく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
4

2 に答える 2