2014-10-08 94 views
0

我有一個data.frame,我想要找到列D或E中的第一個更改。找到此值後,我想將其複製到一個新的data.frame行數少。找到一定的值,並將其複製到另一個data.frame

下面是一個例子:

Picture of data.frame

ID Group Subgroup D   E 
1 1 A 2 1.25  1.10 
2 2 A 2 1.25  1.10 
3 3 A 2 1.25  1.10 
4 4 A 2 1.30  1.10 
5 5 A 2 1.32  1.10 
6 6 A 2 1.32  1.10 
7 7 B 4 3.20  2.42 
8 8 B 4 3.20  2.42 
9 9 B 4 3.20  2.49 
10 10 B 4 3.20  2.53 
11 11 B 4 3.20  2.57 
12 12 B 4 3.20  2.57 
13 13 C 3 2.10  1.80 
14 14 C 3 2.10  1.80 
15 15 C 3 2.10  1.87 
16 16 C 3 2.10  1.90 
17 17 A 5 3.30  2.50 
18 18 A 5 3.30  2.50 
19 19 A 5 3.40  2.50 

我希望以檢測每組和子組的改變,所以在d 1.3 [4,4] A.2; B.4在E 2.49 [9,5];對於C.3在E 1.87 [15,5]和A.5在D 3.4 [19,4]

然後,我想這些值將在一個新的data.frame與較少的行,只顯示值利益。

在這種情況下,這將是4x1行A.2,B.4,C.3和A.5以及一個名爲「reactionT」的列,其中存儲了來自D或E的值。事情是這樣的:

Picture of result

ID   Group  Subgroup reationT 
1 1 A 2 1.30 
2 2 B 4 2.49 
3 3 C 3 1.87 
4 4 A 5 3.40 

回答

1

目前尚不清楚你要如何處理可能發生的情況是一個變化中的列「d」發生在同一時間,列「E」,所以我我已經把這些留作獨立的專欄。

這裏是一個可能的辦法:

library(data.table) 
as.data.table(df1)[, list(D = D[diff(c(D[1], D)) > 0][1], 
          E = E[diff(c(E[1], E)) > 0][1]), 
        by = list(Group, Subgroup)] 
# Group Subgroup D E 
# 1:  A  2 1.3 NA 
# 2:  B  4 NA 2.49 
# 3:  C  3 NA 1.87 
# 4:  A  5 3.4 NA 

如果你知道永遠不會有在「d」和「E」,同時在這個倒塌的形式列的值,我想你可以使用sumna.rm = TRUE將這些列摺疊爲1.

相關問題