如何将包含不同长度字符向量的R列表拆分为特定列?

如何将包含不同长度字符向量的R列表拆分为特定列?,r,tidyr,tibble,R,Tidyr,Tibble,我有一些JSON格式的数据,使用jsonlite我能够读入R中的数据帧。我正在处理的数据是列表中的数据,其中每个列表包含不同长度的字符向量。例如: values <list> 1 A 2 B 3 character(0) 4 C 5 c(A, C) 6 D 7 c(B, C) 8 c(D, E) 我希望将此数据拆分,以便每个值都有自己的列: 1 2 3 4 5 <

我有一些JSON格式的数据,使用jsonlite我能够读入R中的数据帧。我正在处理的数据是列表中的数据,其中每个列表包含不同长度的字符向量。例如:

  values
  <list>      
1   A
2   B
3   character(0)
4   C
5   c(A, C)
6   D
7   c(B, C)
8   c(D, E)
我希望将此数据拆分,以便每个值都有自己的列:

       1      2      3     4      5
     <chr> <chr>  <chr>  <chr>  <chr>
1      A
2            B
3    
4                   C
5      A            C
6                          D
7            B      C
8                          D      E
12345
1A
2 B
3.
4 C
5 A C
6d
7 B C
8 D E
然后,最终将数据转换为一种整洁的格式,以便于按列进行过滤:

       A      B      C     D     E
    <logi> <logi> <logi> <logi> <logi>
1    TRUE  FALSE  FALSE  FALSE  FALSE
2    FALSE TRUE   FALSE  FALSE  FALSE
3    FALSE FALSE  FALSE  FALSE  FALSE
4    FALSE FALSE  TRUE   FALSE  FALSE
5    TRUE  FALSE  TRUE   FALSE  FALSE
6    FALSE FALSE  FALSE  TRUE  FALSE
7    FALSE TRUE   TRUE   FALSE  FALSE
8    FALSE FALSE  FALSE  TRUE   TRUE
abcde
1对错错错错错
2假真假假假
3假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
4假假真假假
5对错对错错
6假假假真假
7假真假假
8假假假真

最后一步应该是简单的突变,这是分裂我不明白。我知道tidyr
separate
unnest\u wide
,但据我所知,它们不允许我控制向量拆分为哪些列。

假设您的数据如下:

df <- structure(list(values = list("A", "B", character(0), "C", c("A", 
"C"), "D", c("B", "C"), c("D", "E"))), 
 row.names = c(NA, -8L), class = "data.frame")
df%
变异(行=行编号())%>%
unnest(值)%%>%
完成(行=1:最大(行))%>%
变异(val=TRUE)%>%
pivot_加宽(名称_from=value,值_from=val,值_fill=FALSE)%>%
dplyr::select(`NA`,-row)
#A、B、C、D、E
#      
#1对错错错错错
#2假真假假假
#3假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
#4假假真假假
#5对错对错错
#6假假假真假
#7假真假假
#8假假假真

假设您的数据如下所示:

df <- structure(list(values = list("A", "B", character(0), "C", c("A", 
"C"), "D", c("B", "C"), c("D", "E"))), 
 row.names = c(NA, -8L), class = "data.frame")
df%
变异(行=行编号())%>%
unnest(值)%%>%
完成(行=1:最大(行))%>%
变异(val=TRUE)%>%
pivot_加宽(名称_from=value,值_from=val,值_fill=FALSE)%>%
dplyr::select(`NA`,-row)
#A、B、C、D、E
#      
#1对错错错错错
#2假真假假假
#3假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假假
#4假假真假假
#5对错对错错
#6假假假真假
#7假真假假
#8假假假真

基于
dput
数据,我们可以

library(dplyr)
library(tidyr)
df1 %>%
  mutate(rn = row_number()) %>% 
  pivot_longer(cols = -rn) %>% 
  unnest(value) %>% 
  pivot_wider(names_from = value, values_from = name, 
  values_fill = FALSE, values_fn = list(name = ~ length(.) > 0)) %>% 
 select(-rn)


# A tibble: 422 x 5
#   C     E     D     A     B    
#   <lgl> <lgl> <lgl> <lgl> <lgl>
# 1 TRUE  FALSE FALSE FALSE FALSE
# 2 FALSE TRUE  FALSE FALSE FALSE
# 3 TRUE  FALSE FALSE FALSE FALSE
# 4 TRUE  FALSE FALSE FALSE FALSE
# 5 TRUE  FALSE FALSE FALSE FALSE
# 6 TRUE  FALSE FALSE FALSE FALSE
# 7 FALSE FALSE TRUE  TRUE  FALSE
# 8 FALSE FALSE TRUE  TRUE  FALSE
# 9 FALSE FALSE TRUE  FALSE FALSE
#10 FALSE FALSE TRUE  FALSE FALSE
# … with 412 more rows
库(dplyr)
图书馆(tidyr)
df1%>%
变异(rn=行数())%>%
枢轴长度(cols=-rn)%>%
unnest(值)%%>%
枢轴(名称从=值,值从=名称,
值\u fill=FALSE,值\u fn=list(名称=~length(.)>0))%>%
选择(-rn)
#A tibble:422x5
#C E D A B
#       
#1对错错错错错
#2假真假假假
#3对错错错错错
#4对错错错错错
#5对错错错错错
#6对错错错错错
#7假假真假
#8假假真假
#9假假假真假假
#10假假真假假
#…还有412行

基于
dput
数据,我们可以

library(dplyr)
library(tidyr)
df1 %>%
  mutate(rn = row_number()) %>% 
  pivot_longer(cols = -rn) %>% 
  unnest(value) %>% 
  pivot_wider(names_from = value, values_from = name, 
  values_fill = FALSE, values_fn = list(name = ~ length(.) > 0)) %>% 
 select(-rn)


# A tibble: 422 x 5
#   C     E     D     A     B    
#   <lgl> <lgl> <lgl> <lgl> <lgl>
# 1 TRUE  FALSE FALSE FALSE FALSE
# 2 FALSE TRUE  FALSE FALSE FALSE
# 3 TRUE  FALSE FALSE FALSE FALSE
# 4 TRUE  FALSE FALSE FALSE FALSE
# 5 TRUE  FALSE FALSE FALSE FALSE
# 6 TRUE  FALSE FALSE FALSE FALSE
# 7 FALSE FALSE TRUE  TRUE  FALSE
# 8 FALSE FALSE TRUE  TRUE  FALSE
# 9 FALSE FALSE TRUE  FALSE FALSE
#10 FALSE FALSE TRUE  FALSE FALSE
# … with 412 more rows
库(dplyr)
图书馆(tidyr)
df1%>%
变异(rn=行数())%>%
枢轴长度(cols=-rn)%>%
unnest(值)%%>%
枢轴(名称从=值,值从=名称,
值\u fill=FALSE,值\u fn=list(名称=~length(.)>0))%>%
选择(-rn)
#A tibble:422x5
#C E D A B
#       
#1对错错错错错
#2假真假假假
#3对错错错错错
#4对错错错错错
#5对错错错错错
#6对错错错错错
#7假假真假
#8假假真假
#9假假假真假假
#10假假真假假
#…还有412行

您能否使用
dput
提供数据,以便我们可以复制数据并使用?
qdapTools::mtabulate(df$values)
?您能否使用
dput
提供数据,以便我们可以复制数据并使用?
qdapTools::mtabulate(df$values)