(哇,与 Python 相比,这项任务非常笨重和痛苦。Anyhoo...)
PS我现在看到您的主要意图是将子字符串长度的向量转换为索引对。您可以使用cumsum()
,然后将索引全部排序:
ll <- c(2,3,5,1,4)
sort( c(1, cumsum(ll), (cumsum(ll)+1)[1:(length(ll)-1)]) )
# now extract these as pairs.
但它是相当痛苦的。flodel 对此的回答更好。
至于拆分成 df 列的实际任务,并有效地做到这一点:
stringr::str_sub()
优雅地与plyr::ddply()
/ldply
require(plyr)
require(stringr)
df <- data.frame(value=c(360010001001002,360010001001004,360010001001005,360010001001006))
df$valc = as.character(df$value)
df <- ddply(df, .(value), mutate, chk1=str_sub(valc,1,2), chk3=str_sub(valc,3,5), chk6=str_sub(valc,6,10), chk11=str_sub(valc,11,11), chk14=str_sub(valc,12,15) )
# value valc chk1 chk3 chk6 chk11 chk14
# 1 360010001001002 360010001001002 36 001 00010 0 1002
# 2 360010001001004 360010001001004 36 001 00010 0 1004
# 3 360010001001005 360010001001005 36 001 00010 0 1005
# 4 360010001001006 360010001001006 36 001 00010 0 1006