是否有一种快速编码方法,最好使用tidyverse对R中的列表列表(长度不同)进行快速编码?
例如:
vals <- list(a=c(1), b=c(2,3), c=c(1,2))
所需结果是一个宽数据框:
1 2 3
a 1 0 0
b 0 1 1
c 1 1 0
谢谢!
答案 0 :(得分:4)
我们可以enframe
将该列表转换为单独的行,创建一个虚拟列,然后使用pivot_wider
将数据转换为宽格式。
library(tidyverse)
enframe(vals) %>%
unnest(value) %>%
mutate(temp = 1) %>%
pivot_wider(names_from = value, values_from = temp, values_fill = list(temp = 0))
# name `1` `2` `3`
# <chr> <dbl> <dbl> <dbl>
#1 a 1 0 0
#2 b 0 1 1
#3 c 1 1 0
答案 1 :(得分:1)
一个base R
选项可能是:
t(table(stack(vals)))
values
ind 1 2 3
a 1 0 0
b 0 1 1
c 1 1 0
答案 2 :(得分:0)
基本R方法,
do.call(rbind, lapply(vals, function(i) as.integer(!is.na(match(unique(unlist(vals)), i)))))
# [,1] [,2] [,3]
#a 1 0 0
#b 0 1 1
#c 1 1 0