2017-01-12 12 views
1

IDカラムを持つ大きなデータフレームを持ち、最初の8208行はIDが1で、次の432行はIDが2、次の8208行はIDが3、次の432行にID 3などがあります。データフレームの1秒ごとのIDグループを変更するIDカラム

ここで、最初の432行のIDが1.1、次の432行のIDが1.2など、行7777:8208の場合は1.19になるようにIDの名前を変更します。次に、次の432行はID2に残ります。次の8208については、2.19までのID 2.1,2.2なども同じです。

私はすでに

split(x, seq(1:19)) 

、その後

tapply(df, split) 

を試してみましたが、これは行の順序を変更し、明らかにID列の名前を変更しません。 基本的に奇数IDは19等分に分割し、行順を同じにして元のIDに.1、.2、.3などを加えて、.19

まで追加するように変更する必要がありますあなたは試みることができる

答えて

0

df[df$id%%2!=0,"id"]=paste0(df[df$id%%2!=0,"id"],".",rep(rep(seq(1,19),each=432),length(df[df$id%%2!=0,"id"])/8208)) 

私はあなたが8208行の倍数を持っているという仮定をしました。

+0

ありがとうございましたが、これは毎秒IDのみ432行を持っているため、そのIDを変更する必要がないことを考慮に入れていません。奇妙なIDだけが19等分に分割される必要があります。私は156種類のIDを持っていますが、そのうち78%(半分)が8208行、残りの半分が432行で合計673920行になります。 – GNee

+0

私の意見が間違っていると、私はそれを修正しようとします。 – Haboryme

+0

奇数IDのみを変更するように編集されました。 – Haboryme

1

この作品も考えてみて、少し目が簡単です。これは、警告を与えるではなく、すべての値が置き換えられるだけので

within(df2, id[df2$id %% 2 != 0] <- paste(id, rep(1:19, 432), sep = '.')) 
関連する問題