【问题标题】:expanding R data.table by splitting on one column [duplicate]通过拆分一列来扩展 R data.table [重复]
【发布时间】:2018-02-02 22:00:31
【问题描述】:

我有一个像这样的 R data.table

> old_table
     id  values
  1:  1   A,B,C
  2:  2     D,E
  3:  3       F
  4:  4 G,H,I,J

我想通过用逗号 (,) 拆分值列来扩展表格,如下所示:

> new_table
     id value
  1:  1     A
  2:  1     B
  3:  1     C
  4:  2     D
  5:  2     E
  6:  3     F
  7:  4     G
  7:  4     H
  7:  4     I
  7:  4     J

有没有简单的方法可以做到这一点?

【问题讨论】:

标签: r data.table


【解决方案1】:

我觉得

new_table <- old_table[, .(value=strsplit(values, ',')[[1]]), id]

提供您所追求的。尽管根据old_table 中“值”的实际数据类型,我有可能是错误的。这是我的设置方式

old_table <- data.table(id=1:4,
                        values=c('A,B,C',
                                 'D,E',
                                 'F',
                                 'G,H,I,J'))

new_table <- old_table[, .(value=strsplit(values, ',')[[1]]), id]

这个输出

    id value
 1:  1     A
 2:  1     B
 3:  1     C
 4:  2     D
 5:  2     E
 6:  3     F
 7:  4     G
 8:  4     H
 9:  4     I
10:  4     J

【讨论】:

    【解决方案2】:

    这是一种使用tidyverse 工具separategather 的方法。您需要检查values 列中最长的逗号分隔组是什么,并在into 参数中为separate 留下足够的变量名。

    library(tidyverse)
    
    old_table <- tibble(
      id = as.integer(c(1, 2, 3, 4)),
      values = c("A,B,C", "D,E", "F", "G,H,I,J")
    )
    
    max_commas <- max(str_count(old_table$values, ","))
    old_table %>%
      separate(values, into = c("v1", "v2", "v3", "v4"),  sep = ",") %>%
      gather(key = "key", value = "value", starts_with("v"), na.rm = TRUE) %>%
      select(-key) %>%
      arrange(value)
    #> Warning: Too few values at 3 locations: 1, 2, 3
    #> # A tibble: 10 x 2
    #>       id value
    #>    <int> <chr>
    #>  1     1 A    
    #>  2     1 B    
    #>  3     1 C    
    #>  4     2 D    
    #>  5     2 E    
    #>  6     3 F    
    #>  7     4 G    
    #>  8     4 H    
    #>  9     4 I    
    #> 10     4 J
    

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多