我有一个数据表,其中一列有逗号分隔的整数字符串,长度不同。我希望每个元素都成一个单独的列。我尝试了stringr::str_extract
和基地strsplit
;两者都不适用于这种情况。它们垂直向量而不是水平向量。如何水平或对逗号分隔的字符串的每个元素进行矢量化?
这是一个可复制的例子。
考虑一个包含2列的简单数据表
set.seed(10)
r<-vector(mode = "character",length = 10)
for(i in 1:5) r[i]=paste(sample(10,4),collapse = ",")
set.seed(10)
for(i in 6:10) r[i]=paste(sample(10,2),collapse = ",")
dt1=data.table(sn=1:10,col=r)
dt1
sn col
1: 1 6,3,4,5
2: 2 1,3,9,2
3: 3 7,4,6,9
4: 4 2,6,3,4
5: 5 1,3,4,6
6: 6 6,3
7: 7 5,7
8: 8 1,3
9: 9 3,10
10: 10 7,4
我需要一个转换的数据表,其第一行为
1: sn=1, col="6,3,4,5", col1=6, col2=3,col3=4,col4=5
和第10行
10: sn=10,col="7,4",col1=7,col2=4,col3=NA,col4=NA
我试过了,
data.table(sn=dt1$sn,col=dt1$col,col1=strsplit(dt1$col,","))
,或者
dt1[,.(sn,col,col1=str_split(col,pattern = ","))]
,或者
dt1[,.(sn,col,col1=str_extract_all(col,pattern = "\\d+")[1],col2=str_extract_all(col,pattern = "\\d+")[2])]
但所有这些都是矢量化的,我在每行和每列中都得到逗号分隔的字符串。
我的问题是如何使用for loop
将逗号分隔的字符串与分开,并将它们存储为data.table中的不同列?即使您将data.table融合成多行,每个元素对应一个元素,将值存储在相同的列名col
中但存储在不同的行中,我将很高兴。
我无法在SO上得到任何相关问题,或者至少搜索没有提出与我的问题相符的结果。
PS。对于任何可以指导我创建示例data.table而不使用我所做的5行代码的人来说,这是一个额外的upvote。它看起来很长而且很长它使用for循环: - )