文字列を一定の間隔で分割したいと思います。私の質問は事実上これと同じです:How to split a string into substrings of a given length?を除いて、ただ1つの文字列ではなく、データセット内に文字列の列があります。ここ定期的に分割した文字列
は、例えば、データ・セットである:ここ
df = read.table(text = "
my.id X1
010101 1
010102 1
010103 1
010104 1
020101 1
020112 1
021701 0
021802 0
133301 0
133302 0
241114 0
241215 0
", header = TRUE, colClasses=c('character', 'numeric'), stringsAsFactors = FALSE)
は、所望の結果です。私が示すように、先行ゼロを削除することを好むだろう。ここでは
desired.result = read.table(text = "
A1 A2 A3 X1
1 1 1 1
1 1 2 1
1 1 3 1
1 1 4 1
2 1 1 1
2 1 12 1
2 17 1 0
2 18 2 0
13 33 1 0
13 33 2 0
24 11 14 0
24 12 15 0
", header = TRUE, colClasses=c('numeric', 'numeric', 'numeric', 'numeric'), stringsAsFactors = FALSE)
が近づいているようだと、多分私はそれを使用することができますループです。しかし、もっと効率的な方法があると私は考えています。
for(i in 1:nrow(df)) {
print(substring(df$my.id[i], seq(1, 5, 2), seq(2, 6, 2)))
}
このapply
文では動作しません:
apply(df$my.id, 1, function(x) substring(df$my.id[x], seq(1, 5, 2), seq(2, 6, 2)) )
は、任意の提案をいただき、ありがとうございます。私はベースRのソリューションを好む。
おそらく 'x < - gsub( '([0-9] {2})([0-9] {2})([0-9] {2} ) '、' \\ 1 - \\ 2 - \\ 3 '、df $ my.id); 'regex'を何度も書き出して実行することを避けるためにdo.call(rbind、lapply(strsplit(x、 ' - )、as.numeric))' – mnel
非常に良い!私は1つのキーストロークを追加しました:strsplit(x、 ' - ') –
@mnelありがとう。私は自分の答えを更新する。 – agstudy