(うわー、この作業はPythonに比べて信じられないほど不格好で骨の折れる作業です。とにかく...)
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