将数据框与由加号“+”分隔的数字拆分为新行
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
中执行此操作。使用 strsplit
到 split
"cap" 列的元素到子字符串,其中 returns 一个列表(lst
),按每个行的长度复制数据集的行列出元素,根据新索引对数据集进行子集化,将 "lst" 元素转换为 "numeric"、unlist
和 cbind
以及修改后的数据集。
lst <- strsplit(as.character(df1$cap), "[+]")
df2 <- cbind(df1[rep(1:nrow(df1), sapply(lst, length)),1:2],
cap= unlist(lapply(lst, as.numeric)))
抱歉这个天真的问题,但我有一个这样的数据框:
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
中执行此操作。使用 strsplit
到 split
"cap" 列的元素到子字符串,其中 returns 一个列表(lst
),按每个行的长度复制数据集的行列出元素,根据新索引对数据集进行子集化,将 "lst" 元素转换为 "numeric"、unlist
和 cbind
以及修改后的数据集。
lst <- strsplit(as.character(df1$cap), "[+]")
df2 <- cbind(df1[rep(1:nrow(df1), sapply(lst, length)),1:2],
cap= unlist(lapply(lst, as.numeric)))