【发布时间】:2021-05-26 19:26:10
【问题描述】:
我有一个 tibble,其中行有 列表 的数据框,每列的值例如
library(tibble)
df = tibble(age = list(data.frame(21), data.frame(57), NULL, data.frame(36)),
role = list(data.frame('scavenger', 'cleaner'), data.frame('cleaner'), NULL, data.frame('cleaner', 'scavenger', 'hunter')),
planet = list(data.frame('jupiter'), data.frame('earth'), data.frame('mars'), data.frame('mars')))
# A tibble: 4 x 3
age role planet
<list> <list> <list>
1 <df[,1] [1 × 1]> <df[,2] [1 × 2]> <df[,1] [1 × 1]>
2 <df[,1] [1 × 1]> <df[,1] [1 × 1]> <df[,1] [1 × 1]>
3 <NULL> <NULL> <df[,1] [1 × 1]>
4 <df[,1] [1 × 1]> <df[,3] [1 × 3]> <df[,1] [1 × 1]>
我希望对具有数据帧大小为1 x n (n > 1) 的行的列进行单热编码,即某些行具有多个值的列(例如,role 列被多个单热替换- 编码列scavenger、cleaner、hunter),以及它们的大小为1 x 1,用数据框中的单个值替换单元格:
# A tibble: 4 x 5
age scavenger cleaner hunter planet
<dbl> <bool> <bool> <bool> <chr>
1 21 1 1 0 jupiter
2 57 0 1 0 earth
3 NA <NA> <NA> <NA> mars
4 36 1 1 1 mars
如果每行只有一个值的列不是数据框,我可以只使用tidyr 的unnest 函数,但不幸的是,这将是例如为每个 age 创建不同的列(不需要)。
我怎样才能做到这一点?
【问题讨论】:
标签: r dataframe one-hot-encoding