将数据框与由加号“+”分隔的数字拆分为新行

split a dataframe with numbers separated by the add sign '+' into new rows

抱歉这个天真的问题,但我有一个这样的数据框:

  n sp   cap
1 1  a     3
2 2  b 3+2+4
3 3  c     2
4 4  d   1+5

我需要将由加号(“+”)分隔的数字拆分为新行,以便获得如下所示的新数据框:

  n sp cap
1 1  a   3
2 2  b   3
3 2  b   2
4 2  b   4
5 3  c   2
6 4  d   1
7 4  d   5

我该怎么做? strsplit?

提前致谢

我们可以使用 splitstackshape

中的 cSplit
library(splitstackshape)
cSplit(df1, 'cap', sep="+", 'long')
#    n sp cap
#1: 1  a   3
#2: 2  b   3
#3: 2  b   2
#4: 2  b   4
#5: 3  c   2
#6: 4  d   1
#7: 4  d   5

或者可以在 base R 中执行此操作。使用 strsplitsplit "cap" 列的元素到子字符串,其中 returns 一个列表(lst),按每个行的长度复制数据集的行列出元素,根据新索引对数据集进行子集化,将 "lst" 元素转换为 "numeric"、unlistcbind 以及修改后的数据集。

lst <- strsplit(as.character(df1$cap), "[+]") 

df2 <- cbind(df1[rep(1:nrow(df1), sapply(lst, length)),1:2],
              cap= unlist(lapply(lst, as.numeric)))