的基-R的方式做,這是手動做分裂應用組合舞蹈。使用您的數據:
dat <- read.table(text = "FirmID LTQ DLCQ DEF
1004 0.45 0.21 0
1004 0.32 0.43 0
1004 0.36 0.47 0
1004 0.25 0.67 0
1004 0.56 0.34 0
1021 0.12 0.39 0
1021 0.16 0.31 0
1021 0.24 0.76 0
1021 0.37 0.56 0
1035 0.89 0.78 0", header = TRUE)
我們
- 各執
FirmID
數據:split(dat, dat$FirmID)
。這將返回一個列表,我們
lapply
結束,應用tail
功能最多的最後兩行返回,這樣做的結果是,其成分是從tail
結果的列表中,我們則
- 合併回成數據幀使用
do.call
和rbind
。
整個呼叫可以一起串成一條線:
do.call("rbind", lapply(split(dat, dat$FirmID), tail, 2))
這給:
> (out <- do.call("rbind", lapply(split(dat, dat$FirmID), tail, 2)))
FirmID LTQ DLCQ DEF
1004.4 1004 0.25 0.67 0
1004.5 1004 0.56 0.34 0
1021.8 1021 0.24 0.76 0
1021.9 1021 0.37 0.56 0
1035 1035 0.89 0.78 0
如果你不喜歡那些討厭的行名字,只是將其刪除:
> rownames(out) <- NULL
> out
FirmID LTQ DLCQ DEF
1 1004 0.25 0.67 0
2 1004 0.56 0.34 0
3 1021 0.24 0.76 0
4 1021 0.37 0.56 0
5 1035 0.89 0.78 0
因爲這些值都是相同的, *爲什麼它是頂部還是底部2 *?你可以採取'唯一'你的data.frame,然後'rbind'它自己一次... – Arun 2013-03-19 17:33:44
+1 @Arun。提供一個現實的例子,或者你會得到一個解決方案,可能不會滿足你的*實際需要。或者,如果這個例子*是現實的,那麼Arun就有你的解決方案。 – ndoogan 2013-03-19 17:42:16
謝謝阿倫,好點。我當然有幾行,實際上這是我最後兩行所需的數據。 – Maximilian 2013-03-19 17:43:13