我通过从一列拆分字符串并将其转换为行来生成data.table
。尽管如此,我已经有了预期的结果,它有点慢,而且我有一个庞大的数据集。有更有效的方法吗?
这是我的例子:
edlist <- list()
for(i in seq_along(cvu_wos_cl3$UT)){
t <- cvu_wos_cl3[,.(UT, AU2, NAU, PY, C1, RP, CC1, NC1)][i]
a <- unlist(strsplit(t[,AU2], ";"))
o <- seq_along(a)
edlist[[i]] <- data.table(AU=a, OR=o, t[, .(UT, PY, C1, RP, CC1, NAU, NC1) ])
}
edlist1 <- rbindlist(edlist)
原始data.table是:
> cvu_wos_cl3[,.(UT, AU2, NAU, PY, C1, RP, CC1, NC1)][1,1:3]
UT AU2 NAU
1: WOS:000070949000010 120472; 998; Soberon, X 3
从这里开始,我将每行存储到t
,然后将列AU2,一串字符,按";"
分割。
t[,AU2]
[1] "120472; 998; Soberon, X"
unlist(strsplit(t[,AU2], ";"))
[1] "120472" " 998" " Soberon, X"
后期,创建一个新的data.table
,其中有3行最初是一行:
data.table(AU=a, OR=o, t[, .(UT, PY, C1, RP, CC1, NAU, NC1) ])[,1:3]
AU OR UT
1: 120472 1 WOS:000070949000010
2: 998 2 WOS:000070949000010
3: Soberon, X 3 WOS:000070949000010
欢迎任何建议。