2017-01-12 52 views
1

我有一個ID列較大的數據框,第8208行具有ID 1,接下來的432行具有ID 2,接下來的8208行具有ID 3,接下來的432行有ID 3等更改每個第二個ID組數據幀的ID列

現在我想重新命名ID,以便前432行有ID 1.1,接下來的432行ID 1.2等 - 直到1.77行7777:8208。然後接下來的432行保留ID 2,對於下一個8208應該完成相同的操作:ID 2.1,2.2等,直到2.19。

我已經嘗試過

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 = '.')) 
相關問題