首页 > 解决方案 > 为字符列 R 中的每个值向数据框中添加行

问题描述

我最好用一个例子来解释我的问题:

    Role Skill        ID
1:    A     a       1, 1/a, 1/b
2:    A     b       1/a, 2/a
3:    B     c       1/a, 2/c
4:    B     d          3
5:    C     e          4

有了上面的数据 dt,我想为 ID 变量的每个值创建额外的行。最终结果应该是:

  Role    Skill    ID
1:    A     a       1
2:    A     a       1/a
3:    A     a       1/b
4:    A     b       1/a
5:    A     b       2/a
6:    B     c       1/a
7:    B     c       2/c
8:    B     d       3
9:    C     e       4

下面是复制数据的代码:

dt <- data.table(Role = c("A","A","B","B","C"),
                 Skill = c("a","b",'c',"d","e"),
                 ID = c(c("1, 1/a, 1/b"),c("1/a, 2/a"),c("1/a, 2/c"),
                    c("3"),c("4")))

标签: rstringdata.tablecharacter

解决方案


我们可以用separate_rows

library(dplyr)
library(tidyr)
dt %>%
   separate_rows(ID, sep=",\\s*")
#    Role Skill  ID
#1:    A     a   1
#2:    A     a 1/a
#3:    A     a 1/b
#4:    A     b 1/a
#5:    A     b 2/a
#6:    B     c 1/a
#7:    B     c 2/c
#8:    B     d   3
#9:    C     e   4

或与strsplit

 dt[, .(ID = unlist(strsplit(ID, ",\\s*"))), .(Role, Skill)]

推荐阅读