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

pcclarke

我有一些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)

或完整复制:

structure(list(values1 = list("C", "E", character(0), "C", character(0), 
    "C", c("D", "A"), c("D", "A"), "D", "D", character(0), "D", 
    "A", "E", "E", "A", "A", "A", "B", "A", "A", "A", "A", "D", 
    "E", "E", "A", character(0), "E", character(0), character(0), 
    "B", character(0), "C", "C", "C", "C", "C", character(0), 
    character(0), character(0), character(0), character(0), character(0), 
    character(0), character(0), "E", c("E", "D"), c("E", "D"), 
    "B", "E", "E", "A", "A", "B", "B", "B", "B", "B", "D", "D", 
    character(0), character(0), character(0), character(0), "B", 
    c("C", "A"), character(0), "A", "B", "B", "B", "B", "B", 
    "C", "C", character(0), character(0), character(0), character(0), 
    "E", "E", character(0), character(0), "B", "E", "A", "C", 
    "B", "C", "A", "C", "C", "C", "C", "C", "A", character(0), 
    "A", character(0), "A", "D", "B", "A", "C", "A", "A", "A", 
    "C", "A", "A", "B", "D", "D", character(0), character(0), 
    character(0), character(0), character(0), character(0), "C", 
    "B", character(0), "B", character(0), "B", "E", "D", c("C", 
    "E"), c("C", "E"), "D", "D", "C", "C", character(0), "C", 
    character(0), "C", "C", "D", "E", "E", "B", "B", "C", "C", 
    "B", "B", "E", character(0), character(0), character(0), 
    character(0), "B", "B", "E", "A", character(0), "B", "A", 
    character(0), "A", "D", "D", c("D", "A"), c("D", "A"), c("D", 
    "B"), c("D", "B"), character(0), "E", character(0), "E", 
    "E", "E", "E", character(0), "D", character(0), "E", "A", 
    "A", "A", "A", "A", "D", "D", c("B", "A"), c("B", "A"), "C", 
    character(0), character(0), "B", "E", "E", "B", c("E", "B"
    ), "A", "A", "B", "B", "D", "D", "A", "A", character(0), 
    "A", "C", character(0), "C", "C", "B", "B", "A", "A", "B", 
    "B", "A", "E", "C", "C", "D", "D", "D", c("C", "E"), character(0), 
    character(0), character(0), character(0), "E", c("E", "A"
    ), "E", character(0), character(0), "A", "D", "D", c("D", 
    "A"), c("D", "A"), character(0), character(0), character(0), 
    character(0), character(0), character(0), "B", "C", "C", 
    "C", "C", "B", "B", c("C", "E"), c("C", "E"), "E", "C", "C", 
    "C", c("E", "D", "B", "A"), c("E", "D", "B", "A"), character(0), 
    "A", character(0), "A", c("C", "A"), c("C", "A"), c("C", 
    "A"), "E", "E", "A", character(0), "C", c("E", "D"), c("E", 
    "D"), character(0), character(0), character(0), character(0), 
    "A", "A", "A", "A", "D", "E", c("C", "D"), "E", character(0), 
    character(0), character(0), "D", "D", character(0), "A", 
    "B", character(0), character(0), character(0), character(0), 
    "D", "D", "D", "E", "E", "D", "D", "B", "B", "B", "E", "D", 
    "C", "D", "C", "C", "E", "E", "A", character(0), character(0), 
    "B", character(0), "B", "B", "B", "B", character(0), "A", 
    "C", "C", "C", "D", "D", "D", character(0), "D", character(0), 
    "D", "B", "A", character(0), "B", "D", "A", "A", character(0), 
    "A", "D", "D", "E", "E", "B", character(0), character(0), 
    character(0), "C", "C", "C", "B", "B", "A", "D", c("C", "B"
    ), character(0), "D", "C", "C", character(0), character(0), 
    "D", "D", "D", c("B", "A"), "E", "A", "A", character(0), 
    "E", "C", "B", character(0), character(0), character(0), 
    character(0), "E", "E", "D", "C", "C", "E", "E", "E", "E", 
    character(0), "E", "E", "A", "B", "A", "A", "D", "E", "E", 
    "B", "B", character(0), character(0), "D", "D", "C", "D", 
    "D", "E", character(0), "E", character(0), "E", c("D", "B"
    ), character(0), "B", character(0), character(0), "D", character(0), 
    "D", "D", "D", "C", character(0), "E", "E", c("E", "B"), 
    c("E", "B"), "E", "E", "D", "D", "B", c("E", "A"), c("E", 
    "A"), c("C", "D"), c("C", "D"), c("C", "B"), c("C", "B"), 
    character(0), "C", "B"), values2 = list("C", "E", "C", 
    "C", "C", "C", c("D", "A"), c("D", "A"), "D", "D", "D", "D", 
    "A", "E", "E", "A", "A", "A", "B", "A", "A", "A", "A", "D", 
    "E", "E", "A", "E", "E", character(0), "B", "B", "C", "C", 
    "C", "C", "C", "C", c("E", "A"), c("E", "A"), c("E", "A"), 
    c("E", "A"), c("C", "A"), c("C", "A"), c("C", "A"), c("C", 
    "A"), "E", c("E", "D"), c("E", "D"), "B", "E", "E", "A", 
    "A", "B", "B", "B", "B", "B", "D", "D", c("C", "B"), c("C", 
    "B"), c("C", "B"), c("C", "B"), "B", c("C", "A"), character(0), 
    "A", "B", "B", "B", "B", "B", "C", "C", c("E", "D"), c("E", 
    "D"), c("E", "D"), c("E", "D"), "E", "E", character(0), character(0), 
    "B", "E", "A", "C", "B", "C", "A", "C", "C", "C", "C", "C", 
    "A", "A", "A", "A", "A", "D", "B", "A", "C", "A", "A", "A", 
    "C", "A", "A", "B", "D", "D", "E", "E", "E", "E", character(0), 
    character(0), "C", "B", "B", "B", "B", "B", "E", "D", c("C", 
    "E"), c("C", "E"), "D", "D", "C", "C", "C", "C", "C", "C", 
    "C", "D", "E", "E", "B", "B", "C", "C", "B", "B", "E", "B", 
    "B", "B", "B", "B", "B", "E", "A", "B", "B", "A", "A", "A", 
    "D", "D", c("D", "A"), c("D", "A"), c("D", "B"), c("D", "B"
    ), "E", "E", "E", "E", "E", "E", "E", "D", "D", "E", "E", 
    "A", "A", "A", "A", "A", "D", "D", c("B", "A"), c("B", "A"
    ), "C", character(0), character(0), "B", "E", "E", "B", c("E", 
    "B"), "A", "A", "B", "B", "D", "D", "A", "A", "A", "A", "C", 
    "C", "C", "C", "B", "B", "A", "A", "B", "B", "A", "E", "C", 
    "C", "D", "D", "D", c("C", "E"), "D", "D", "D", "D", "E", 
    c("E", "A"), "E", character(0), character(0), "A", "D", "D", 
    c("D", "A"), c("D", "A"), c("D", "A"), c("D", "A"), c("D", 
    "A"), c("D", "A"), c("D", "A"), c("D", "A"), "B", "C", "C", 
    "C", "C", "B", "B", c("C", "E"), c("C", "E"), "E", "C", "C", 
    "C", c("E", "D", "B", "A"), c("E", "D", "B", "A"), "A", "A", 
    "A", "A", c("C", "A"), c("C", "A"), c("C", "A"), "E", "E", 
    "A", "C", "C", c("E", "D"), c("E", "D"), "A", "A", "A", "A", 
    "A", "A", "A", "A", "D", "E", c("C", "D"), "E", character(0), 
    character(0), character(0), "D", "D", character(0), "A", 
    "B", c("D", "B"), c("D", "B"), c("D", "B"), c("D", "B"), 
    "D", "D", "D", "E", "E", "D", "D", "B", "B", "B", "E", "D", 
    "C", "D", "C", "C", "E", "E", "A", character(0), "B", "B", 
    "B", "B", "B", "B", "B", "A", "A", "C", "C", "C", "D", "D", 
    "D", "D", "D", "D", "D", "B", "A", "B", "B", "D", "A", "A", 
    "A", "A", "D", "D", "E", "E", "B", character(0), character(0), 
    character(0), "C", "C", "C", "B", "B", "A", "D", c("C", "B"
    ), "D", "D", "C", "C", character(0), "D", "D", "D", "D", 
    c("B", "A"), "E", "A", "A", character(0), "E", "C", "B", 
    "C", "C", "C", "C", "E", "E", "D", "C", "C", "E", "E", "E", 
    "E", "E", "E", "E", "A", "B", c("C", "E", "D", "B", "A"), 
    c("C", "E", "D", "B", "A"), "D", "E", "E", "B", "B", character(0), 
    character(0), "D", "D", "C", "D", "D", "E", "E", "E", "E", 
    "E", c("D", "B"), "B", "B", character(0), "D", "D", "D", 
    "D", "D", "D", "C", "E", "E", "E", c("E", "B"), c("E", "B"
    ), "E", "E", "D", "D", "B", c("E", "A"), c("E", "A"), c("C", 
    "D"), c("C", "D"), c("C", "B"), c("C", "B"), "C", "C", "B")), row.names = c(NA, 
445L), class = "data.frame")

我想拆分此数据,以便每个值都有自己的列:

       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

然后,最终将数据转换为整齐的格式,以便按列轻松过滤:

       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

最后一步使用mutate应该很简单,这是我无法弄清楚的分裂。我知道tidyrseparateunnest_wider,但是据我所知,它们不允许我控制向量拆分到哪些列。

罗纳克·沙

假设您的数据是这样的:

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")

你可以做 :

library(dplyr)
library(tidyr)

df %>%
  mutate(row = row_number()) %>%
  unnest(values) %>%
  complete(row = 1:max(row)) %>%
  mutate(val = TRUE) %>%
  pivot_wider(names_from = values, values_from = val, values_fill = FALSE) %>%
  dplyr::select(-`NA`, -row)

#    A     B     C     D     E    
#  <lgl> <lgl> <lgl> <lgl> <lgl>
#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 

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将pandas列中的可变长度列表拆分为列

来自分类Dev

R:在特定字符处将长度为n> 1的字符向量拆分为n个向量的列表

来自分类Dev

如何将向量列表拆分为列或矩阵?

来自分类Dev

如何将包含字典的列表拆分为单独的列?

来自分类Dev

如何将字符向量拆分为数据帧?

来自分类Dev

如何将字符向量拆分为数据帧?

来自分类Dev

如何将列拆分为不同的向量

来自分类Dev

如何将向量拆分为带有列的表?

来自分类Dev

如何将基于相等长度的数据帧列拆分为R中的单独行

来自分类Dev

C-如何将内存分配给可变长度的字符串输入?

来自分类Dev

如何将列表列表拆分为单独的列

来自分类Dev

如何将列表拆分为特定值

来自分类Dev

如何将列表拆分为特定值

来自分类Dev

需要将 Pandas 数据框列中的可变长度数据拆分为多列

来自分类Dev

如何将字符串列表拆分为记录?

来自分类Dev

如何将unicode字符串拆分为列表

来自分类Dev

如何将字符串拆分为对象列表

来自分类Dev

如何将unicode字符串拆分为列表

来自分类Dev

R:如何将具有不同元素数量的字符串向量拆分为多个向量?

来自分类Dev

如何将字符串拆分为特定模式?

来自分类Dev

将一个Arraylist拆分为多个可变长度的Arraylists

来自分类Dev

如何使用R将向量拆分为列

来自分类Dev

AngularJS如何将列表动态拆分为多列

来自分类Dev

R:如何将列表拆分为AM / PM

来自分类Dev

满足条件时如何将向量拆分为向量列表?

来自分类Dev

如何将多值、字符分隔的列拆分为多行?

来自分类Dev

如何根据列表的长度将包含列表的字典拆分为相等的部分

来自分类Dev

使用包含相应字符的列将字符串向量拆分为数据帧

来自分类Dev

使用可变长度字符串的可变长度列表,如何创建所有组合

Related 相关文章

  1. 1

    将pandas列中的可变长度列表拆分为列

  2. 2

    R:在特定字符处将长度为n> 1的字符向量拆分为n个向量的列表

  3. 3

    如何将向量列表拆分为列或矩阵?

  4. 4

    如何将包含字典的列表拆分为单独的列?

  5. 5

    如何将字符向量拆分为数据帧?

  6. 6

    如何将字符向量拆分为数据帧?

  7. 7

    如何将列拆分为不同的向量

  8. 8

    如何将向量拆分为带有列的表?

  9. 9

    如何将基于相等长度的数据帧列拆分为R中的单独行

  10. 10

    C-如何将内存分配给可变长度的字符串输入?

  11. 11

    如何将列表列表拆分为单独的列

  12. 12

    如何将列表拆分为特定值

  13. 13

    如何将列表拆分为特定值

  14. 14

    需要将 Pandas 数据框列中的可变长度数据拆分为多列

  15. 15

    如何将字符串列表拆分为记录?

  16. 16

    如何将unicode字符串拆分为列表

  17. 17

    如何将字符串拆分为对象列表

  18. 18

    如何将unicode字符串拆分为列表

  19. 19

    R:如何将具有不同元素数量的字符串向量拆分为多个向量?

  20. 20

    如何将字符串拆分为特定模式?

  21. 21

    将一个Arraylist拆分为多个可变长度的Arraylists

  22. 22

    如何使用R将向量拆分为列

  23. 23

    AngularJS如何将列表动态拆分为多列

  24. 24

    R:如何将列表拆分为AM / PM

  25. 25

    满足条件时如何将向量拆分为向量列表?

  26. 26

    如何将多值、字符分隔的列拆分为多行?

  27. 27

    如何根据列表的长度将包含列表的字典拆分为相等的部分

  28. 28

    使用包含相应字符的列将字符串向量拆分为数据帧

  29. 29

    使用可变长度字符串的可变长度列表,如何创建所有组合

热门标签

归档